如何在mysql中使用JOIN来显示所有不匹配的数据

Aba*_*aij 6 mysql join

我想显示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或甚至任何东西.

尝试移动wherejoin条件:

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)