MySQL中,寫SQL語句的時候,遇到Y(jié)ou can't specify target table '表名' for update in FROM clause這樣的錯誤,它的意思是說,不能先select出同一表中的某些值,再update這個表(在同一語句中),即不能依據(jù)某字段值做判斷再來更新某字段的值。
實例如下語句:
update t_user set password =(select t.password from t_user t where t.username = 'admin') where uid = '1'
語義是沒有問題的,將id為1的密碼設(shè)置為和admin相同的密碼,運行時報錯如下:
update t_user set password = (select t.password from t_user t where t.username = 'admin') where uid = '1'
Error Code: 1093. You can't specify target table 't_user' for update in FROM clause 0.000 sec
主要原因是MySQL不支持這種查詢修改的方式,針對此類問題有個簡單的解決辦法,繞一下將查詢結(jié)果放到臨時表中進(jìn)行取值和更新,本例修改后語句如下:
update t_user set password = (select a.password from
(select t.password from t_user t where t.username = 'admin') a)
where uid = '1';
運行成功,其實就是將SELECT出的結(jié)果再通過中間表SELECT一遍,這樣就避免了錯誤。








暫無數(shù)據(jù)