0

という名前の3つのテーブルがあります

students (id, name)
subjects (id, name, is_published)
student_subjects (id, student_id, subject_id)

学生が履修した科目は に入りstudent_subjectsます。NULL subject_idしかし、student_subjects に学生用が含まれている場合があります。

Studentsテーブルのデータはこちら

1;"John"
2;"Ahmeah"
3;"Dina"
4;"Leo"
5;"Lenon"

被験者表

1;"Computer Sci";1
2;"Physics";1
3;"Bio";1
4;"Maths";0

Student_subjects

1;1;1
2;1;2
3;1;4
4;2;1
5;2;3
6;2;4
7;3;2
8;4;1
9;5;NULL

現在、科目を含むすべての学生を取得し、科目が添付されていない学生の名前も表示するために、次のようにクエリを使用しています

SELECT
  students.*,
  inners.name
FROM
  students
  LEFT JOIN ( SELECT
                student_id,
                subjects.name
              FROM
              student_subjects
              JOIN subjects ON ( student_subjects.subject_id = subjects.id AND subjects.is_published = 1)
              ) AS inners ON (inners.student_id = students.id )

同じhttp://sqlfiddle.com/#!12/9cf93/12を行うためのより良い方法はありますか

4

1 に答える 1

1
SELECT s.*, su.name AS SubjName
FROM students AS s
LEFT JOIN student_subjects AS ss ON ss.student_id = s.id
LEFT JOIN subjects AS su ON su.id = ss.subject_id

あなたがリストしたものと同じことをします。それはあなたが求めているものですか?

于 2013-02-07T04:16:38.587 に答える