0
加入我有3个表,命名为过滤与条件
students (id, name)
subjects (id, name, is_published)
student_subjects (id, student_id, subject_id)
进去student_subjects
采取一个学生的科目。但也有地方student_subjects包含NULL subject_id
一个学生
以下情况下对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
对不起,我似乎已经错过了(subjects.is_published = 1) – Akash
的查询条件。您可以通过如下方式添加一行:'LEFT JOIN subject as su su su.id = ss.subject_id AND su.is_published = 1' – mrunion
这不起作用,因为这也会显示所有没有附加在student_subjects中的学生 – Akash