我有两张桌子。一个是Course表,第二个是Teacher表。我想让所有不教Teacher'Math'。我怎样才能做到这一点?

课程表

course_id   course  teacher_id  marks
 1          Physics     1        60
 2          Math        1        60
 3          Chemestry   1        60
 4          English     2        60
 5          Hindi       2        60
 6          Physics     2        60
 7          Chemestry   3        60
 8          English     4        60
 9          Math        5        60
10          Math        6        60


老师桌

teacher_id  name      salary    gender
   1       Teacher1    20         1
   2       Teacher2    30         1
   3       Teacher3    40         2
   4       Teacher4    50         2
   5       Teacher5    60         1
   6       Teacher6    70         2

最佳答案

我想让所有不教数学的老师。


您需要将两个表都连接在Teacher_id上,然后根据课程过滤出行。

SQL> SELECT DISTINCT t.name
  2  FROM course c,
  3    teacher t
  4  WHERE c.teacher_id = t.teacher_id
  5  AND c.course     <> 'Math';

NAME
--------
Teacher2
Teacher1
Teacher4
Teacher3

SQL>


编辑由于您有老师教授多门课程,因此您需要进一步过滤:

SQL> WITH DATA AS
  2    (SELECT c.*,
  3      t.name
  4    FROM course c,
  5      teacher t
  6    WHERE c.teacher_id = t.teacher_id
  7    AND c.course      <> 'Math'
  8    )
  9  SELECT DISTINCT name
 10  FROM data
 11  WHERE teacher_id NOT IN
 12    (SELECT teacher_id FROM course WHERE course = 'Math'
 13    )
 14  /

NAME
--------
Teacher2
Teacher4
Teacher3

SQL>


注意请记住,使用NOT EXISTS子句的其他解决方案在性能上更好,因为表扫描更少,甚至索引扫描也更少。使用适当的索引,不存在的查询将是一种最佳方法。

关于mysql - 给出所有不教数学的老师的名字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29665915/

10-11 02:53