SQL查询 - 一个表中的项目列表不在另一个表中
问题描述:
我需要一些SQL查询的帮助。我有一个课程表和一个表,其中包含用户ID和课程ID,表示用户已经采取的课程(可能没有采取任何;该表中没有该用户ID的条目)。SQL查询 - 一个表中的项目列表不在另一个表中
我需要一个查询来返回课程列表而不是采取。
Course Category table
CategoryID
Caegory
Courses table
CourseID
CategoryID
CourseName
...
UserCourse table
UserID
CourseID
答
这将只列出课程
select *
from Courses C
Left join CourseCategory cc on
cc.CategoryID = c.CategoryID
where CourseID not in (Select CourseID from UserCourse where UserID = 14)
答
我需要的是一个给定的用户ID和课程类别,哪些课程在该类别内尚未被该用户拍摄
(这本来应该顺便请求。)
所以:
- 选择
courses
。 - 限于所需的类别。
- 限于课程不在用户采取的一套课程。
查询:
select *
from courses
where categoryid = 123
and courseid not in (select courseid from usercourse where userid = 456);
答
写同样的查询,将执行更快的另一种方式。
select C.CourseID,C.CategoryID
from Courses C
Left join CourseCategory cc on
cc.CategoryID = c.CategoryID
left join UserCourse uc
on C.CourseID=uc.CourseID
where uc.CourseID is null
所有课程都没有采取任何用户?所有没有被特定用户使用的课程?所有不是每个用户的课程(即所有的用户/课程对都不在UserCourse表中)? –