1. 程式人生 > >MySQL 中 You can't specify target table '表名' for update in FROM clause錯誤

MySQL 中 You can't specify target table '表名' for update in FROM clause錯誤

在MySQL中,寫SQL語句的時候 ,可能會遇到You can't specify target table '表名' for update in FROM clause這樣的錯誤,它的意思是說,不能先select出同一表中的某些值,再更新這個表(在同一語句中),即不能依據某欄位值做判斷再來更新某欄位的值。

DELETE u 
FROM
	users u 
WHERE
	u.sex IN (SELECT sex FROM users GROUP BY sex HAVING count( 1 ) > 1 );

將SELECT出的結果再通過中間表SELECT一遍,這樣就規避了錯誤

sql修改為

DELETE u 
FROM
	users u 
WHERE
	u.sex IN ( SELECT a.sex FROM ( SELECT sex FROM users GROUP BY sex HAVING count( 1 ) > 1 ) a );

此問題只出現於MySQL,MSSQL和Oracle不會出現此問題