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;