首页 > 解决方案 > 在多对多表中查询 AND

问题描述

我知道这是一个相对简单的问题,我就是想不通。我有三个表:peoplepresentationspeople_presentationspeople并且presentations都有 ID 列,并且people_presentations每个people和都有外键presentations

例如:

人们:

ID | Name
1  | John
2  | Ian
3  | Mike

演示文稿:

ID | Title
1  | A new hope
2  | The Empire Strikes Back
3  | Return of the Jedi

people_presentations:

people_ID | presentation_ID
        1 | 1
        2 | 1
        2 | 2
        1 | 3
        3 | 3

我正在尝试选择附加了特定人员子集的所有演示文稿 ID。对于ORs 这相对容易: SELECT DISTINCT presentation_ID FROM people_presentations WHERE people_ID IN (1,2);,但对于 AND 情况......我就是想不通。这需要为 N 人工作,所以我宁愿没有无限JOIN的 s。

标签: sqlsqlite

解决方案


您可以为您想要的人过滤表格,按演示文稿分组并在HAVING子句中设置条件:

SELECT presentation_ID
FROM people_presentations
WHERE people_ID IN (1, 2)
GROUP BY presentation_ID
HAVING COUNT(*) = 2 -- the number of people

请参阅演示


推荐阅读