SQL仅选择具有全部3度的成员

时间:2017-07-24 23:56:19

标签: sql postgresql

我有3张桌子。 Tourist表,Junction表和Country表。 它们都是通过外键链接的。     Junction表格有tourist_idcountry_id     Country表格有name(国家名称)

Junction通过tourist_idcountry_id

链接旅游和国家/地区

我想要检索tourist的所有信息,这些信息仅限于JapanTaiwanCanada

如果一个游客多于或少于这三个国家,我不希望他们被退回。

如何编写此SQL查询?

1 个答案:

答案 0 :(得分:3)

您可以使用group byhaving

执行此操作
select j.tourist_id
from junction j join
     country c
     on j.country_id = c.country_id
group by j.tourist_id
having count(distinct case when c.name in ('Japan', 'Canada', 'Taiwan') then c.name end) = 3 and
       sum( (c.name not in ('Japan', 'Canada', 'Taiwan'))::int ) = 0;