带有子查询的Mysql删除[重复]
Posted
技术标签:
【中文标题】带有子查询的Mysql删除[重复]【英文标题】:Mysql delete with subquery [duplicate] 【发布时间】:2012-01-21 14:10:10 【问题描述】:可能重复:SQL Delete: can't specify target table for update in FROM clause
我正在尝试删除一些行,但目前没有成功。
DELETE FROM product_pictures
WHERE picture = (SELECT picture FROM product_pictures WHERE id = ?)
您不能在FROM
子句中指定要更新的目标表“product_pictures”
我以前从未见过此错误消息,也无法找到一些有用的信息来说明我做错了什么。
行示例:
ID Picture
19 picture-grey.jpg
20 picture-grey.jpg
21 picture-grey.jpg
【问题讨论】:
请确认您是否只想删除具有给定 id 的行,或者您有更复杂的要求。 @kris: 或者您想删除所有具有相同picture
的行与具有id=?
的行
链接(上面提到的):***.com/questions/45494/…不是回答你的问题吗?
对不起,我不熟悉 Distinct,所以对我来说没有多大意义..
Cheekysoft 的 2 个答案正是 zerkms 和我在这里回答的。
【参考方案1】:
DELETE FROM product_pictures
WHERE picture = (SELECT picture FROM (SELECT picture FROM product_pictures WHERE id = ?) x)
这个作弊会欺骗mysql分析器
【讨论】:
至少它给了我另一种错误:每个派生表都必须有自己的别名:) @kris: 所以为嵌套查询添加一个别名(使用x
别名更新查询)【参考方案2】:
DELETE a
FROM product_pictures AS a
JOIN product_pictures AS b
ON b.picture = a.picture
WHERE b.id = ?
或:
DELETE a
FROM product_pictures AS a
JOIN
( SELECT DISTINCT picture
FROM product_pictures
WHERE id = ?
) AS b
ON b.picture = a.picture
【讨论】:
【参考方案3】:您的查询中有一个循环。你为什么不干呢
DELETE FROM product_pictures
WHERE id = ?
【讨论】:
以上是关于带有子查询的Mysql删除[重复]的主要内容,如果未能解决你的问题,请参考以下文章