我需要一些SQL查询的帮助。我有一个课程表和一个包含用户ID和课程ID的表,表示用户已经学过的课程(可能没有采用任何课程;该表中没有该用户ID的条目)。
我需要一个查询来返回不的课程列表。
Course Category table
CategoryID
Caegory
Courses table
CourseID
CategoryID
CourseName
...
UserCourse table
UserID
CourseID
答案 0 :(得分:1)
您可以使用not exists
Select *
From Courses c
Where Not Exists (Select 1 From UserCourse uc Where uc.CourseID = c.CourseID)
答案 1 :(得分:0)
这只会列出课程
select *
from Courses C
Left join CourseCategory cc on
cc.CategoryID = c.CategoryID
where CourseID not in (Select CourseID from UserCourse where UserID = 14)
答案 2 :(得分:0)
我需要的是给定的用户ID和课程类别,该用户未使用该类别的哪些课程
(顺便说一句,这应该在请求中。)
所以:
courses
。查询:
select *
from courses
where categoryid = 123
and courseid not in (select courseid from usercourse where userid = 456);
答案 3 :(得分:0)
编写相同查询的另一种方法,它将执行得更快。
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