簡體   English   中英

從不在另一個表中的表中選擇記錄

[英]Selecting records from a table not in another table

我有兩張桌子。

Course
course_id | name
------------------
1         | PROG
2         | ENGL
3         | SCIE

Enrollment List
ID | student_id | course_id | grade
-----------------------------------
1  | 445566     | 1         | 4.0
2  | 445566     | 2         | 2.0
3  | 778899     | 3         | 2.5

我需要查詢表,以便它返回student_id和他們尚未學習的課程。 結果應該是:

student_id | course_id
----------------------
445566     | 3
778899     | 1
778899     | 2

我試過了這個問題

SELECT student_id, name FROM course c, list l WHERE NOT EXISTS(SELECT NULL FROM course c, list l WHERE c.course_id=l.course_id)

返回零記錄。 我該怎么做?

簡單規則: 永遠不要FROM子句中使用逗號。 始終使用顯式JOIN語法。

無論如何,您需要以特定方式處理此問題。 從所有學生和所有課程的列表開始。 然后使用left joinnot exists來過濾掉不在列表中的連接:

SELECT s.student_id, c.name
FROM course c CROSS JOIN
     (SELECT DISTINCT student_id FROM list l) s
WHERE NOT EXISTS (SELECT 1
                  FROM list l2
                  WHERE c.course_id = l2.course_id and s.student_id = l2.student_id
                 )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM