MySQL 您不能在 FROM 子句中指定目标 table X 进行更新

MySQL You can't specify target table X for update in FROM clause

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

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

这样就不会产生下面的错误:

You can't specify target table 'cmsTemplate' for update in FROM clause

此处记录的问题:

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

谢谢, 史蒂夫

更新:查询说明

查询思路如下:

  1. SETmaster字段TO NULL
  2. WHERE master 字段 IS NOT NULL
  3. AND WHERE master 字段 不等于任何 的值nodeId字段记录(内同table)

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

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