如何删除sql中的条件父子关系

wfveoks0  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(419)

我有一个父子关系a、b和c,想根据以下规则删除行:
如果存在c,则删除c
然后,如果b没有cs,则删除b
然后,如果a没有bs,则删除a
我想知道一个sql(mysql版本7)查询应该如何实现这个规则。这些规则必须应用于一个查询或存储过程。

我的第一个想法是使用“commontableexpression”,但我发现在mysql版本8中可以使用它。
有人能给我指出正确的方向吗?

wvmv3b1j

wvmv3b1j1#

对于c,没有违反约束。
DELETE FROM B WHERE NOT EXISTS(SELECT * FROM C where idB = B.id) DELETE FROM A WHERE NOT EXISTS(SELECT * FROM B where idA = A.id) 通过这种方式,您可以在执行删除之前检查是否会违反外键。对于大型表,应该考虑添加索引。

h7wcgrx3

h7wcgrx32#

我通常避免使用它们,因为它们在过度使用时可能会导致性能噩梦,但这听起来像是触发器的确切用例,假设您总是希望这样的情况发生。
触发器是自动响应数据库中的其他更改而执行的,因此当您执行其他操作(如从b或c中删除一行)时,触发器将隐式地为您处理。
下面是另一篇文章中的一个示例:phpmyadmin创建一个触发器,用于在不存在子行时删除父行。
可以有一个触发器处理b-c父关系,另一个处理a-b关系。我相信他们应该很好。

toe95027

toe950273#

我想你在找这样的东西

SELECT Employees.ID, COUNT(Orders.OrderID) AS NumberOfOrders
FROM (Employees
LEFT JOIN Orders ON Orders.EmployeeID = Employees.EmployeeID)
GROUP BY Employees.ID
HAVING COUNT(Orders.OrderID) = 0;

其中雇员=a,订单=b

相关问题