MySql:You can not specify target table for update in FROM clause錯誤

字面意思是:不能在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';


很簡單的道理,多給他嵌套一層,不讓他直接關聯就行了,舉一反三,刪除時報這個錯也是同樣的道理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章