带有子查询的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删除[重复]的主要内容,如果未能解决你的问题,请参考以下文章

带有重复子查询的mySQL select联合查询工作缓慢

MySQL 删除子查询中的重复子句

带有子查询的 MySQL 条件更新

MySQL:删除子查询返回的行

带有子查询的 MySQL UPDATE TABLE 不会先执行子查询

mysql 删除可以用子查询吗