字面意思是:不能在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';
很簡單的道理,多給他嵌套一層,不讓他直接關聯就行了,舉一反三,刪除時報這個錯也是同樣的道理。