什么是多对多关系的SQL命令以及一对多?

时间:2018-04-24 01:01:39

标签: sql database

以下是我的样本:

enter image description here

如何列出所有items属于building X,category为Y? 我不确定要寻找什么(它加入了吗?内外?)。我认为通过谷歌找到答案的困难是因为我不知道如何正确地说出这个问题。请帮忙。

1 个答案:

答案 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中没有重复项。如果两种关系都是多对多关系,那么第一种方法可能会更快。