【问题标题】:Mysql delete with subquery [duplicate]带有子查询的Mysql删除[重复]
【发布时间】: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=? 的行
  • 链接(上面提到的):stackoverflow.com/questions/45494/…不是回答你的问题吗?
  • 对不起,我不熟悉 Distinct,所以对我来说没有多大意义..
  • Cheekysoft 的 2 个答案正是 zerkms 和我在这里回答的。

标签: mysql subquery


【解决方案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 = ?
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-09
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      相关资源
      最近更新 更多