我有一个简单的问题,但我想使用没有。我有两个表:student_table和student_course
STUDENT (
ID,
Name
)
STUDENT_COURSE (
ID,
student_ID,
course_ID
)
我想在STUDENT_COURSE表中选择那些没有任何相应course_ID的学生姓名,所以我写了
SELECT *
FROM STUDENT
LEFT JOIN STUDENT_COURSE ON STUDENT_COURSE.STUDENT_ID = STUDENT.ID
但是我怎么写下没有?
答案 0 :(得分:4)
要查找没有STUDENT
的{{1}},您可以使用不同的方法。请参阅此article进行比较:
使用STUDENT_COURSE
:
NOT EXISTS
使用SELECT s.*
FROM STUDENT s
WHERE NOT EXISTS(
SELECT 1 FROM STUDENT_COURSE c WHERE c.STUDENT_ID = s.ID
)
LEFT JOIN
使用SELECT
s.*
FROM STUDENT s
LEFT JOIN STUDENT_COURSE c
ON c.STUDENT_ID = s.ID
WHERE c.ID IS NULL
NOT IN
答案 1 :(得分:4)
只需添加[STUDENT_COURSE].[STUDENT_ID] IS NULL
过滤器即可找到未参与任何课程的学生
Left Outer join
会为正确的表格列生成NULL
个值,但这些值不匹配。
SELECT *
FROM [STUDENT]
LEFT JOIN [STUDENT_COURSE]
ON [STUDENT_COURSE].[STUDENT_ID] = STUDENT.ID
WHERE [STUDENT_COURSE].[STUDENT_ID] IS NULL