mysql选择where和with多个相同的变量

时间:2013-06-24 18:57:09

标签: mysql

我有以下列的表格: product_attribute_id,product_id,attribute_id,attribute_value

表格中的数据如下所示:
0,1,1,something
1,1,2,somethingelse
2,1,3,somethingelses

我想做这样的事情:

SELECT product_id FROM table WHERE attribute_id = 1 AND attribute_id = 2 AND attribute_id = 3

我理解为什么这不起作用,我只需要获取产品的ID,即STRICTLY具有attribute_id 1,2,3,使用IN可能是不可能的。

在mysql中有没有办法实现这个目的?

你的时间:)

5 个答案:

答案 0 :(得分:3)

这是“set-within-sets”查询的示例。您正在寻找给定产品中的所有三个属性。

我喜欢使用聚合和having子句解决这些问题,因为这是最灵活的方法:

select product_id
from table t
group by product_id
having max(attribute_id = 1) > 0 and
       max(attribute_id = 2) > 0 and
       max(attribute_id = 3) > 0

答案 1 :(得分:1)

 SELECT product_id
 FROM table
 GROUP BY product_id
 HAVING sum(case when attribute_id = 1 then 1 else 0 end) > 0
 AND sum(case when attribute_id = 2 then 1 else 0 end) > 0
 AND sum(case when attribute_id = 3 then 1 else 0 end) > 0 

答案 2 :(得分:0)

使用WHERE IN ..

像这样...

SELECT product_id FROM table WHERE attribute_id IN (1,2,3);

我不明白为什么你说“IN是不可能的”??

你也可以使用OR,就像这样...

SELECT product_id FROM table WHERE attribute_id = 1 OR attribute_id = 2 OR attribute_id = 3

答案 3 :(得分:0)

您可以使用OR代替AND

SELECT product_id FROM table WHERE attribute_id = 1 OR attribute_id = 2 OR attribute_id = 3

答案 4 :(得分:0)

您也可以使用UNION

SELECT product_id FROM table WHERE attribute_id = 1
UNION
SELECT product_id FROM table WHERE attribute_id = 2
UNION
SELECT product_id FROM table WHERE attribute_id = 3