我想显示2个表中的数据,我想要显示所有数据,包括不匹配的数据.我试过这个查询.
SELECT * FROM student s
LEFT JOIN grade g ON g.student_id=s.student_id
WHERE s.student_id = 9
Run Code Online (Sandbox Code Playgroud)
我得到的只是展示有成绩的学生,而我需要的是向所有学生展示,即使他们没有成绩.我也尝试过使用inner join,right join但结果是一样的.该查询应该是什么?
小智 7
问题是WHERE s.student_id = 9,因为左表(学生表)中不匹配的行将具有s.student_id相等的null,并且此where子句将使用可空student_id值删除这些行,因为null不等于9或甚至任何东西.
尝试移动where到join条件:
SELECT *
FROM student s
LEFT JOIN grade g ON g.student_id=s.student_id AND s.student_id = 9;
Run Code Online (Sandbox Code Playgroud)
或使用NOT IN:
SELECT *
FROM student s
WHERE s.student_id = 9
AND student_id NOT IN(SELECT student_id
from grade
where student_id is not null);
Run Code Online (Sandbox Code Playgroud)