【问题标题】:MySQL You can't specify target table X for update in FROM clauseMySQL 您不能在 FROM 子句中指定目标表 X 进行更新
【发布时间】:2017-01-04 12:55:32
【问题描述】:

任何可以重写以下查询的 SQL 专家:

UPDATE cmsTemplate 
   SET master = NULL 
 WHERE master IS NOT NULL 
   AND master NOT IN (SELECT nodeId 
                        FROM 
                           ( SELECT * FROM cmsTemplate a) b
                     )

这样它不会产生以下错误

您不能在 FROM 子句中指定目标表 'cmsTemplate' 进行更新

此处记录的问题:

http://dev.mysql.com/doc/refman/5.6/en/update.html

谢谢, 史蒂夫

更新:查询说明

查询的思路如下:

  1. SET master 字段 TO NULL
  2. WHERE master 字段 IS NOT NULL
  3. 并且在哪里 master 字段不等于任何 nodeId 字段记录的值(在同一个表中)

【问题讨论】:

    标签: mysql sql-update syntax-error


    【解决方案1】:

    您可以将更新与加入一起使用:

    update cmsTemplate c1 left join cmsTemplate c2
    on c1.`master` = c2.nodeId
    set c1.`master` = null
    where c2.nodeId is null;
    

    【讨论】:

    • 太棒了!我现在知道它是如何工作的,感谢您的解决方案:)
    猜你喜欢
    • 2012-03-06
    • 2011-08-25
    • 2017-01-12
    • 2013-07-05
    • 2012-12-03
    • 1970-01-01
    • 2012-01-10
    • 2016-05-19
    • 2015-06-08
    相关资源
    最近更新 更多