一对多关系,查找只包含指定值的组
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
您可以使用集合运算符INTERSECT:
SELECT car FROM drivers WHERE driver = 'Fred'
INTERSECT
SELECT car FROM drivers WHERE driver = 'Frodo'
假设只有 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
所以假设我有一个 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
您可以使用集合运算符INTERSECT:
SELECT car FROM drivers WHERE driver = 'Fred'
INTERSECT
SELECT car FROM drivers WHERE driver = 'Frodo'
假设只有 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