我有以下列的表格:
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中有没有办法实现这个目的?
你的时间:)
答案 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