2016-07-15 14 views
1

私は2つのテーブルを持っています。別のテーブルにないテーブルからレコードを選択する

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) 

を試してみました。どうすればいい?

+0

あなたはクロス積を得ます。参加 – Jens

+0

左の結合とヌルを確認する – Drew

+0

この文脈では「グレード」とは何ですか?それは 'レベル'/'難しさ'のようなものですか? – Strawberry

答えて

3

簡易ルール:なしは、FROM句にカンマを使用します。 常には、明示的なJOIN構文を使用します。

いずれにしても、特定の方法でこれにアプローチする必要があります。すべての生徒とすべてのコースのリストから始めましょう。次に、リストにないものを除外するleft joinまたはnot 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 
       ) 
関連する問題