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';


很简单的道理,多给他嵌套一层,不让他直接关联就行了,举一反三,删除时报这个错也是同样的道理。

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