SQL查询 - 一个表中的项目列表不在另一个表中

时间:2017-10-06 17:46:36

标签: sql sql-server sql-server-2008 tsql

我需要一些SQL查询的帮助。我有一个课程表和一个包含用户ID和课程ID的表,表示用户已经学过的课程(可能没有采用任何课程;该表中没有该用户ID的条目)。

我需要一个查询来返回的课程列表。

Course Category table
    CategoryID
    Caegory

Courses table
    CourseID
    CategoryID
    CourseName
    ...

UserCourse table
    UserID
    CourseID

4 个答案:

答案 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和课程类别,该用户未使用该类别的哪些课程

  

(顺便说一句,这应该在请求中。)

所以:

  1. courses
  2. 中选择
  3. 限制为所需类别。
  4. 限制不在用户所采用的课程集中的课程。
  5. 查询:

    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