SQL:从表中选择它不存在于用户的其他表中

时间:2015-06-13 07:35:33

标签: sql

我有两个表,TestStudentTest具有以下结构:

Test

testID     subject     totalPoints     schoolSubject
1          Programming 100             informatics
2          Webdesign   80              informatics
...

StudentTest

studentTestID     userID     testID     timeStudied     points     date
1                 1          1          60              60         2015-05-20
2                 2          1          100             80         2015-05-20
2                 2          2          95             75         2015-05-20
...

现在我想创建一个用户可以填写标记的页面(在StudentTest中),但我只想显示用户尚未标记的测试。例如,如果用户1已登录,则他应该只看到测试2,因为用户1没有该测试的标记。用户2不应该看到任何东西,因为他有所有现有测试的标记。

我不知道SQL应该是什么样的。

有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:0)

您可以使用exists运算符:

SELECT subject, schoolSubject
FROM   Test t
WHERE  NOT EXISTS (SELECT *
                   FROM   StudentTest st
                   WHERE  t.testId = st.testId
                   -- And possibly limit it to a single studentId
                  )

答案 1 :(得分:0)

使用左连接空过滤器模式:

SELECT subject, schoolSubject
FROM Test t
LEFT JOIN StudentTest st ON t.testId = st.testId
WHERE st.testId IS NULL