gpt4 book ai didi

Mysql删除父级不存在的行

转载 作者:可可西里 更新时间:2023-11-01 07:16:37 25 4
gpt4 key购买 nike

我有一个名为 items 的表,其列为“itemID”和“parentID”,其中 parentID 是表中另一行的 ID。我想删除 parentID 行不再存在的行。

这是我想出的:

DELETE FROM items
WHERE (SELECT COUNT(1)
FROM items as parent
WHERE items.parentID=parent.itemID)=0

但我收到以下错误:您无法在 FROM 子句中指定要更新的目标表“items”

编辑:如果链接到被该查询删除的项目的项目也将被查询删除,这会很好,这在 sql 中可行还是我应该编写代码?

最佳答案

使用子查询是低效的;使用左连接 multiple-table syntax :

DELETE items 
FROM items
left join items as parent
on items.parentID = parent.itemID
WHERE parent.itemID is NULL

多表语法允许您在删除命令中指定连接 - 这样您就可以连接多个表并且只从一个表中删除。 IE。 DELETE t1 FROM t1 join t2 .... 将加入 t1t2 但只从表 t1 .

关于您的问题“如果链接到被该查询删除的项目的项目也将被该查询删除,这将是很好的,这在 sql 中可行还是我应该编写代码?”

我认为这会以级联结束——删除的记录可能是另一条记录的父记录,所以也删除那条记录,但那条记录也可能是另一条记录的父记录,所以你也需要删除它,等等. 我认为不可能通过单个 SQL 查询来查询所有这些级联。

所以我认为最简单的解决方案是重新运行上述查询,直到没有行被删除。

关于Mysql删除父级不存在的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17083862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com