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

SQL仅选择具有全部3度的成员,sql,postgresql,Sql,Postgresql,我有三张桌子旅游者表、Junction表和国家表。 它们都由外键链接。 Junction表中有游客id和国家id 国家表中有名称(国家名称) 连接点通过游客id和国家id 我想检索所有的游客信息,这些信息仅限于日本、台湾和加拿大 如果一个游客去过多于或少于这三个国家,我不希望他们被退回 如何编写此SQL查询?您可以使用groupby和having执行此操作: select j.tourist_id from junction j join country c on j.cou

我有三张桌子<代码>旅游者表、
Junction
表和
国家
表。 它们都由外键链接。
Junction
表中有
游客id
国家id
国家
表中有
名称
(国家名称)

连接点通过
游客id
国家id

我想检索所有的
游客
信息,这些信息仅限于
日本
台湾
加拿大

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


如何编写此SQL查询?

您可以使用
groupby
having
执行此操作:

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;

您可以使用
分组方式
拥有

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;