通过多行选择相关对象的正确方法

时间:2019-05-23 15:18:25

标签: sql ruby-on-rails ruby postgresql

说我有3个表:Houses has_many Wardrobes has_many Clothes

houses    wardrobes   clothes
------    ---------   -------
id        id          id
name      house_id    wardrobe_id
          name        name

如何拥有House,我可以选择Wardrobesjeans作为shirt的{​​{1}}?

由于明显的原因而无法使用的示例代码:

Clothes

欢迎使用任何SQL / ActiveRecord答案。

1 个答案:

答案 0 :(得分:1)

您可以使用汇总来获取所有包含这两种衣服的衣柜:

select w.id, w.house_id
from wardrobes w join
     clothes c
     on c.wardrobe_id = w.id
where c.name in ('jeans', 'shirt')
group by w.id, w.house_id
having count(distinct c.name) = 2;

如果您只想在一栋房子中使用house_id中的where进行过滤。