首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从另一个表但类型不同的多个连接记录筛选数据库表?

如何从另一个表但类型不同的多个连接记录筛选数据库表?
EN

Stack Overflow用户
提问于 2019-11-17 18:53:06
回答 2查看 22关注 0票数 0

我有一个products表和相应的ratings表,其中包含一个外键product_idgrade(int)type,这是一个枚举接受值robustnessprice_quality_ratio

分数接受1到10之间的值。例如,如果我想过滤产品,robustness的最低等级是7,price_quality_ratio的最低等级是8,那么查询会是什么样的呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-17 18:55:39

你可以参加两次,每次评分一次。inner join排除任何评级标准不合格的产品,

代码语言:javascript
复制
select p.*
from products p
inner join rating r1 
    on r1.product_id = p.product_id
    and r1.type = 'robustness'
    and r1.rating >= 7
inner join rating r2 
    on r2.product_id = p.product_id
    and r2.type = 'price_quality_ratio'
    and r2.rating >= 8

另一个选项是使用do条件聚合。这只需要一个join,然后是一个group by;在having子句中检查评等标准。

代码语言:javascript
复制
select p.product_id, p.product_name
from products p
inner join rating r 
    on r.product_id = p.product_id
    and r.type in ('robustness', 'price_quality_ratio')
group by p.product_id, p.product_name
having 
    min(case when r.type = 'robustness' then r.rating end) >= 7
    and min(case when r.type = 'price_quality_ratio then r.rating end) >= 8
票数 1
EN

Stack Overflow用户

发布于 2019-11-17 19:04:37

@GMB提出的JOIN也将是我的第一个建议。如果由于必须维护太多的rX.rating而变得过于复杂,您还可以使用嵌套查询:

代码语言:javascript
复制
SELECT *
FROM (
  SELECT p.*, r1.rating as robustness, r2.rating as price_quality_ratio
  FROM products p
  JOIN rating r1 ON (r1.product_id = p.product_id AND r1.type = 'robustness')
  JOIN rating r2 ON (r2.product_id = p.product_id AND r2.type = 'price_quality_ratio')
) AS tmp
WHERE robustness >= 7
  AND price_quality_ratio >= 8
-- ORDER BY (price_quality_ratio DESC, robustness DESC) -- etc
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58904022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档