【问题标题】:MySQL delete with nested select query使用嵌套选择查询的 MySQL 删除
【发布时间】:2011-09-04 10:13:58
【问题描述】:

我有以下 MySQL 查询:

DELETE FROM catalogue 
WHERE catalogue_id IN (
  SELECT catalogue_id 
  FROM catalogue 
  WHERE (
    product_id = (SELECT product_id FROM catalogue WHERE catalogue_id = '2290') 
    AND length_id = (SELECT length_id FROM catalogue WHERE catalogue_id = '2290') 
    AND gauge_id = (SELECT gauge_id FROM catalogue WHERE catalogue_id = '2290')
  )
)

但是当我尝试执行时,我收到以下错误消息:

您不能在 FROM 子句中指定目标表“目录”进行更新

有人可以告诉我哪里出错了吗?

【问题讨论】:

    标签: mysql sql-delete


    【解决方案1】:

    执行双重嵌套

    DELETE FROM catalogue 
    WHERE catalogue_id IN (SELECT catalogue_id FROM (
      SELECT catalogue_id 
      FROM catalogue 
      WHERE (
        product_id = (SELECT product_id FROM catalogue WHERE catalogue_id = '2290') 
        AND length_id = (SELECT length_id FROM catalogue WHERE catalogue_id = '2290') 
        AND gauge_id = (SELECT gauge_id FROM catalogue WHERE catalogue_id = '2290')
      )) x
    )
    

    它欺骗了 mysql

    【讨论】:

    • 完美运行 zerkms,但必须“愚弄” MySQL 的原因是什么?
    • 如果您有多个WHERE 列怎么办?即DELETE FROM catalogue WHERE catalogue_id AND catalogue_name IN...
    • @ThraT:我不确定你在问什么。可以用ADD添加多个谓词,是的。
    • 你会如何改变你的答案以使用ADD
    • 已经 9 年了,仍然需要这个骇客。
    【解决方案2】:

    或者你可以使用临时表:

      CREATE TEMPORARY TABLE t AS
      SELECT catalogue_id 
      FROM catalogue 
      WHERE (
        product_id = (SELECT product_id FROM catalogue WHERE catalogue_id = '2290') 
        AND length_id = (SELECT length_id FROM catalogue WHERE catalogue_id = '2290') 
        AND gauge_id = (SELECT gauge_id FROM catalogue WHERE catalogue_id = '2290')
      );
    
      DELETE FROM catalogue WHERE catalogue_id IN (SELECT catalogue_id FROM t);
    

    通过您的查询,您得到了You can't specify target table 'catalogue' for update in FROM clause,因为您无法在一个查询中对同一个表进行选择和更新。

    【讨论】:

    • 感谢卡米尔的解释。
    猜你喜欢
    • 2022-01-23
    • 2013-09-04
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多