Sql 在多对多表中查询AND

Sql 在多对多表中查询AND,sql,sqlite,Sql,Sqlite,我知道这是一个相对简单的问题,我就是想不出来。我有三个表格:人员、演示文稿、和人员演示文稿人员和演示文稿都有ID列,并且人员_演示文稿都有外键指向人员和演示文稿 例如: 人民: 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_ID | presentation_ID

我知道这是一个相对简单的问题,我就是想不出来。我有三个表格:
人员
演示文稿
、和
人员演示文稿
<代码>人员和
演示文稿
都有ID列,并且
人员_演示文稿
都有外键指向
人员
演示文稿

例如:

人民:

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_ID | presentation_ID
        1 | 1
        2 | 1
        2 | 2
        1 | 3
        3 | 3
人员介绍:

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

我正在尝试选择附加了特定人员子集的所有演示ID。对于
s,这相对容易:
从人员ID位于(1,2)中的人员演示中选择不同的演示ID,但对于和的情况。。。我就是搞不懂。这需要为N个人工作,因此我不希望有无限的
JOIN
s。

您可以筛选表中需要的人,按演示分组,并在
HAVING
子句中设置条件:

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

一个有趣的方法是(错误地)使用LISTAGG:

WITH cteAttendees
  AS (SELECT pp.PRESENTATION_ID,
             ',' || LISTAGG(pp.PEOPLE_ID, ',') WITHIN GROUP (ORDER BY pp.PEOPLE_ID) || ',' AS ATTENDEES
  FROM PEOPLE_PRESENTATIONS pp
  GROUP BY pp.PRESENTATION_ID)
SELECT *
  FROM cteAttendees a
  WHERE a.ATTENDEES LIKE '%,1,%' AND
        a.ATTENDEES LIKE '%,2,%'

但是
人员ID=1和人员ID=2。。。而people_ID=N
不会给你任何结果。我想你需要一个
,所以
中的
是个不错的选择solution@DonKnacki,同意这不会产生结果,这就是我有问题的原因。但是我需要这样一种情况,我只会得到第1人和第2人都附在一起的演示文稿。不过,这看起来已经在下面解决了。这似乎就是答案。非常感谢!我会在可能的时候接受答案。