以下是我的样本:
如何列出所有items
属于building
X,category
为Y?
我不确定要寻找什么(它加入了吗?内外?)。我认为通过谷歌找到答案的困难是因为我不知道如何正确地说出这个问题。请帮忙。
答案 0 :(得分:0)
exists
怎么样?
select i.*
from items i
where exists (select 1
from building b
where b.id = i.building_id and b.name = 'X'
) and
exists (select 1
from category_has_item chi join
category c
on c.category_id = chi.id
where chi.item_id = i.id and c.category = 'Y'
);
在您的情况下,您也可以使用join
s:
select i.*
from items i join
buildings b
on i.building_id = b.id join
category_has_item chi
on chi.item_id = i.id join
category c
on chi.category_id = c.id
where b.name = 'X' and c.category = 'Y';
我认为这与您的情况基本相同,假设category_has_item
中没有重复项。如果两种关系都是多对多关系,那么第一种方法可能会更快。