一对多关系,查找只包含指定值的组

One to many relationship, find groups that contain only the specified values

所以假设我有一个 table

ID  Car
1   Polo
2   Jetta

还有一对多的关系,比如

Id  Driver  Car
1   Jason   1
2   Fred    1
2   Fred    2
3   Batman  1
4   Frodo   2

如何获取只有 Fred 和 Frodo 驾驶的汽车的记录? IE。查询只需要 return car 2.

可能是这样的

select c.car 
from cardriver cd join cars c
   on c.id=cd.car and cd.Driver in ('Fred','Frodo')
group by c.car
   having count(distinct cd.Driver)=2

db fiddle here

您可以使用集合运算符INTERSECT:

SELECT car FROM drivers WHERE driver = 'Fred'
INTERSECT
SELECT car FROM drivers WHERE driver = 'Frodo'

db<>fiddle

假设只有 Fred 和 Frodo 驾驶它 意味着 Fred, Frodo 而没有其他人,你会写:

SELECT car
FROM car_driver
GROUP BY car
HAVING COUNT(CASE WHEN driver IN ('Fred', 'Frodo') THEN 1 END) = 2
AND COUNT(*) = 2