sql - SQL 过滤来自连接的多个匹配项
问题描述
假设我有以下数据;
Person
1. John
2. Anne
3. Will
PersonAnimals
1 1
1 2
1 3
2 1
3 2
Animal
1. Cat
2. Dog
3. Fish
现在我可以像这样查询所有数据;
SELLECT *
FROM Person p
JOIN PersonAnimal pa ON pa.PersonId = p.Id
JOIN Animal a ON pa.AnimalId = a.Id;
但现在我想查询每个拥有猫和狗的人。(在示例中只有 John 匹配该过滤器)您可以在 SQL 中执行此操作吗?一个怎么样?
解决方案
聚合可以在这里提供帮助:
SELLECT p.*
FROM Person p JOIN
PersonAnimal pa
ON pa.PersonId = p.Id JOIN
Animal a
ON pa.AnimalId = a.Id
WHERE a.species IN ('cat', 'dog')
GROUP BY p.id
HAVING COUNT(DISTINCT a.species) = 2; -- both are present
注意:在某些数据库中,您需要SELECT
在GROUP BY
. 以上假设person.id
是主键(或唯一键)符合标准 SQL。
推荐阅读
- numpy - Pytorch,将一个向量的排列添加到矩阵的条目时摆脱for循环?
- python - 列表索引必须是整数或切片,而不是 str GOOGLE COLAB
- javascript - 用CSS填充滚动的蒙面文本?
- spring - Redis DB 在詹金斯中没有连接
- swiper - 如何在反应滑动器中使用滚动条?
- matlab - 在 Matlab 中向颜色条添加附加标签
- arrays - 如何使用带有结构数组的框模糊算法来模糊图像?
- python - Python FastApi GET 循环
- static-linking - 为什么 Autotools 忽略已安装的静态库?
- powershell - 在远程服务器上执行脚本块