说我有3个表:Houses
has_many Wardrobes
has_many Clothes
。
houses wardrobes clothes
------ --------- -------
id id id
name house_id wardrobe_id
name name
如何拥有House
,我可以选择Wardrobes
和jeans
作为shirt
的{{1}}?
由于明显的原因而无法使用的示例代码:
Clothes
欢迎使用任何SQL / ActiveRecord答案。
答案 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
进行过滤。