Rails - 按字段值从表中获取记录

时间:2013-12-10 11:51:17

标签: sql ruby-on-rails

我有表存储了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查询,但我无法正确构建它。

2 个答案:

答案 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