【发布时间】:2018-01-17 05:27:42
【问题描述】:
我有表 A、B 和 C。表 A 是 B 和 C 的父表。现在,在我的批处理文件中,它有这个删除语句,它从表 B 和 C 中删除记录:
DELETE b.*, c.*
FROM tableB AS b
LEFT JOIN tableC AS c
ON c.tableB_id = b.id
WHERE c.date IS NULL
AND DATE(c.updated_at) != CURDATE()
我想要做的是从表 A 中删除所有记录,其中 id(表 A 的主键)等于从上面的 DELETE 语句中删除的记录。
此外,表 B 和 C 都有一个列(例如 tableA_id),它是表 A 的外键。我尝试了以下查询,但我认为这不是正确的做法,因为它们不是基于上述DELETE 声明:
DELETE a FROM tableA a
WHERE a.id NOT IN (
SELECT b.tableA_id FROM tableB b
)
DELETE a FROM tableA a
WHERE a.id NOT IN (
SELECT c.tableA_id FROM tableC c
)
想法?
编辑:我也有同样的问题,但它基于 oracle:https://dba.stackexchange.com/questions/49634/delete-rows-in-parent-table-based-on-criteria-in-child-table-oracle
【问题讨论】:
-
您的要求可能有点偏离。你是说如果我从
B或C中删除一个子记录,那么整个A应该被删除?如果还有其他(未删除的)子项仍在引用A,这可能会导致键约束错误。似乎您希望在这里使用ON DELETE CASCADE,但再次将删除从子级级联删除到父级是没有意义的。
标签: mysql sql sql-delete