gpt4 book ai didi

SQL:保证恰好 N 行与多对多查询匹配?

转载 作者:行者123 更新时间:2023-12-04 21:51:14 25 4
gpt4 key购买 nike

哦。这两天我一直在努力解决这个问题,但没有成功,我所有的工作都因此而停止。

开门见山:

我在这三个表之间有一个多对多的关系:

Students
Students_Courses
Courses

我需要确切地知道哪些学生注册了 Physics AND Calculus AND CS101

他们可以注册其他类(class),但我需要知道这三门类(class)中有哪些。

SELECT * FROM Students A 
INNER JOIN Students_Courses B on A.id = B.student
INNER JOIN Courses C on B.course = C.id
WHERE C.name = Physics OR C.name = calculus OR C.name = cs101

但是。这将使学生返回任何这些类(class)。

如果我将 WHERE 子句更改为:

WHERE C.name = Physics AND C.name = calculus AND C.name = cs101

它不会返回任何东西,因为没有匹配所有这三个的行。

我该怎么做?我在这里缺少的 SQL 理论是什么?我意识到 SQL 按行工作,所以我需要按行过滤。但我确信这是一个常见的查询,我只是找不到理论的名称或者我在这里缺少什么来解决它。

我确实通过选择所有这些类(class)然后过滤哪些学生匹配这三个类(class)来解决它,但这是在应用程序中,我希望这可以是一个 SQL 查询。

非常感谢您的帮助。

最佳答案

SELECT student
FROM Students
WHERE student IN (SELECT student FROM Students_Courses B INNER JOIN Courses C on B.course = C.id WHERE C.name = Physics) AND
student IN (SELECT student FROM Students_Courses B INNER JOIN Courses C on B.course = C.id WHERE C.name = calculus) AND
student IN (SELECT student FROM Students_Courses B INNER JOIN Courses C on B.course = C.id WHERE C.name = cs101);

关于SQL:保证恰好 N 行与多对多查询匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10304569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com