我有表存储了item_id,property_id和value_id(属性的值,关于项目)。它看起来像这样:
item_id property_id value_id
--------------------------------
001 p_001 aaa
001 p_002 bbb
001 p_003 ccc
002 p_001 zzz
002 p_002 bbb
002 p_003 ddd
003 p_001 yyy
003 p_002 bbb
003 p_003 ddd
所以我想要获取值为val = [bbb]
的项目,因此它将是item_001,item_002和item_003。
但是现在我想要的是具有值val = [bbb, ccc]
的项目,它只是item_001
现在我想要获得值为val = [bbb, ddd]
的项目,显然是item_002和item_003。
当val = [aaa,zzz]
时,它应输出item_001以及item_002。
我怎样才能做到这一点?
我认为有简单的SQL查询,但我无法正确构建它。
答案 0 :(得分:0)
虽然我没有时间对整个场景进行模拟测试,但我认为以下内容应该有效:
SELECT DISTINCT A.item_id
FROM table A
INNER JOIN table B
ON A.item_id = B.item_id
INNER JOIN table C
ON A.item_id = C.item_id
WHERE A.value_id = 'bbb'
AND B.value_id = 'ccc'
此外,以下链接应证明有用:
SQL: how to select a single id ("row") that meets multiple criteria from a single column
答案 1 :(得分:0)
在rails mysql中你可以这样做:
Item.find(:all, :select => :item_id,:group => 'item_id HAVING COUNT(id) >= 2', :conditions => ['value_id IN (?)', ['bbb','ccc']])
您将看到SQL查询:
Item Load (0.2ms) SELECT item_id FROM `items` WHERE (value_id IN ('bbb','ccc')) GROUP BY item_id HAVING COUNT(id) >= 2