2016-11-08 15 views
0

とQUERY私はこのテーブルを持っている:SQL(多分基本) - 3つのテーブル

  • 学生(名前、studentNumber) - 学生のテーブル
  • 加入契約(enrollmentNumber、studentNumber、主題) - テーブル内の被験者と

    : - 学生が
  • グレード(studentNumber、件名、グレード)登録したテストの成績を表

私はこの仕事をしました

生徒の名前、登録されている科目、および受講生が得た の成績を返すSQL命令を記述します。 SQL命令では、 サブジェクトに登録し、そのサブジェクトのテストに参加しなかった学生も返さなければなりません(この場合、学生は登録テーブルに と表示されますが、グレードテーブルには表示されません)。

私はこのクエリを開発:

SELECT * FROM student s 
    LEFT JOIN enrollments e ON s.studentNumber = e.studentNumber 
    LEFT JOIN grades g ON e.studentNumber = g.studentNumber 
    WHERE e.subject = g.subject 

ノー成績と入学者数は、(理にかなって)表示されないため、エラーが、最後のWHEREである...誰が助けることができます知っています私はこれを考え出していますか?

+0

第二LEFT、クエリが動作している代わりに – Sparky

+0

学生のテーブルにJOINを変更してみますが、ないよう:あなたはどこの一環として、外部結合にフィルタを使用する場合、それが効果的に内部結合に変換しますその登録+ studentNumberに成績がないときに、登録行が出力に入ることを本当に欲しかった。 – user3674234

答えて

1

move "eject = gject" は、左側の結合でフィルタとして使用します。

SELECT * FROM student s 
     LEFT JOIN enrollments e ON s.studentNumber = e.studentNumber 
     LEFT JOIN grades g ON e.studentNumber = g.studentNumber 
      AND e.subject = g.subject 
+0

ありがとう!これはとてもうまくいった!私は信じていない私はとても近かった! :D – user3674234