字面意思是:不能在FROM子句中为更新指定目标表“area”。咋一看可能有点懵,其实意思是就是不能直接在子查询里查询要修改的这张表。
引发报错的SQL:
UPDATE area
SET state = 0
WHERE
id IN (
SELECT
ar2.id
FROM
area AS ar1
INNER JOIN area AS ar2 ON ar2.parent_id = ar1.id
WHERE
ar1.parent_id = '110000'
OR ar1.id = '110000'
OR ar2.parent_id = '110000'
)
OR id = '110000'
修改后的版本:
UPDATE area
SET state = 0
WHERE
id IN (
SELECT
id
FROM
(
SELECT
ar2.id
FROM
area AS ar1
INNER JOIN area AS ar2 ON ar2.parent_id = ar1.id
WHERE
ar1.parent_id = '110000'
OR ar1.id = '110000'
OR ar2.parent_id = '110000'
) childs
)
OR id = '110000';
很简单的道理,多给他嵌套一层,不让他直接关联就行了,举一反三,删除时报这个错也是同样的道理。