我有3张桌子。 Tourist
表,Junction
表和Country
表。
它们都是通过外键链接的。
Junction
表格有tourist_id
和country_id
Country
表格有name
(国家名称)
Junction通过tourist_id
和country_id
我想要检索tourist
的所有信息,这些信息仅限于Japan
,Taiwan
和Canada
。
如果一个游客多于或少于这三个国家,我不希望他们被退回。
如何编写此SQL查询?
答案 0 :(得分:3)
您可以使用group by
和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;