mysql - 删除表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 个表循环查询以删除记录?
解决方案
您可以通过查找没有有效科目的导师来删除学生
所以运行
DELETE FROM Student WHERE Tutor_id IN
(SELECT id from Tutor WHERE NOT EXISTS
(SELECT NULL FROM Subject WHERE Subject.id = Subject_id))
在您从学生中删除之前
推荐阅读
- ios - 无法使用 ES256 创建 JWT 令牌
- ms-access - MS ACCESS - 查询
- reactjs - 未调用模拟调度函数
- docker - 是否可以使用docker临时创建测试环境?
- mysql - 从select mysql中的长文本中提取多个img src
- java - 将 ZonedDateTime 转换为 java.util.Date
- python - Jupyter Labs:隐藏代码单元并在启动时运行所有单元
- arrays - 如何使用教义(Symfony 4)输出多对一数据?
- javascript - 打字稿:类型“{}”不可分配给类型“选择”
',如何正确输入 javascript `pick` 函数? - javascript - 为什么我的 jQuery 动画完成回调会导致超出最大堆栈大小?