从表中选择与另一个表没有关系的表

Ant*_*iro 0 mysql

具体问题是列出从未评分过的教师的姓名.

我有"老师"表,其中包含"名称"和"ID"列.
并且'成绩'表格中包含"IDTeacher"和"成绩"列.

不明白为什么这不起作用:

Select Name from teachers where not exists(Select * from grades, teachers)
Run Code Online (Sandbox Code Playgroud)

dog*_*ose 5

您可以将它与成绩表一起使用,并使用连接为右侧返回"null"的那些:

SELECT
   name
from
   teachers t
LEFT JOIN
   grades g
on
   t.teacher = g.teacher
WHERE
   ISNULL(g.teacher)
Run Code Online (Sandbox Code Playgroud)

编辑:如果教师在成绩表中没有条目,则考虑右键加入,但不是,正确的加入可能不起作用.(然后你会完全想念他,即使他在teacher桌子里)

你也可以使用WHERE IN这个:

SELECT 
  name 
FROM 
  teachers 
WHERE 
  name 
NOT IN (SELECT name from grades)
Run Code Online (Sandbox Code Playgroud)

但是,MySQL Optimizer会将其重写为@Gordon Linoff编写的相关子查询.使用WHERE NOT IN更容易阅读imho.