具有相同列和UNIQUE值的多个WHERE条件的SELECT

时间:2019-04-20 21:51:58

标签: mysql sql

我认为这很容易,但是我需要一些帮助来解决它:

id   product  option    suboption 
-----------------------------------
118     A       1           1 
119     A       2           2 
120     A       3           1 
121     B       1           2
122     B       2           2
123     B       3           1
124     C       1           1
125     C       2           2
126     C       3           1

我需要找到所有唯一的产品,其中对于选项= 1然后子选项= 1,对于选项= 2然后子选项= 2,对于选项= 3然后子选项= 1。

在此示例中,满足我的要求的是产品A和C。

如何查询?

2 个答案:

答案 0 :(得分:3)

您可以使用group byhaving。这是一种方法:

select product
from t
where (option, suboption) in ( (1, 1), (2, 2), (3, 1) )
group by product
having count(distinct option) = 3;

在您的示例数据中,每个产品只有一个选项。如果是这种情况,请使用:

having count(*) = 3

代替count(distinct)

答案 1 :(得分:1)

您可以按产品分组:

select 
  product
from tablename
group by product
having
  sum(option = 1 and suboption = 1) > 0
  and
  sum(option = 2 and suboption = 2) > 0
  and
  sum(option = 3 and suboption = 1) > 0