首页 > 解决方案 > 删除表A中不存在表B引用且后跟表C的记录

问题描述

我正在使用一个巨大的 MySQL 数据库,其中包含 3 个名为 Student、Tutor 和 Subject 的表 Student 有 Tutor_id,Tutor 有 Subject_id

Student 中有一些 Tutor_id 不在 Tutor 表中。为此,我做了以下事情:

DELETE FROM Student WHERE NOT EXISTS(SELECT NULL FROM Tutor WHERE Tutor.id = Tutor_id)

现在还有另一种情况,即 Tutor 中的一些 Subject_id 不存在于 Subject 表中。

例如:学生表:

Id  Tutor_id
1      2
2      1
3      3

导师表:

Id   Subject_id
1      3
2      4  
4      1

主题表:

Id    Name
1      Maths
2      Science
4      English

我提到的 DELETE 查询删除了 Student 表中的第 3 条记录作为 id:3 在 Tutor 中不存在,但是如何删除 Student 表中的记录 2,因为它属于没有 Subject 的 Tutor_id 1(因为 ID 为 3 的 Subject 不存在)。如何使用这 3 个表循环查询以删除记录?

标签: mysql

解决方案


您可以通过查找没有有效科目的导师来删除学生

所以运行

DELETE FROM Student WHERE Tutor_id IN 
  (SELECT id from Tutor WHERE NOT EXISTS
    (SELECT NULL FROM Subject WHERE Subject.id = Subject_id))

在您从学生中删除之前


推荐阅读