mysql中錯誤:1093-You can’t specify target table for update in FROM clause的解決方法
發(fā)現(xiàn)問題
最近在處理一些數(shù)據(jù)庫中數(shù)據(jù)的時候,寫了下面的這一條sql語句:
UPDATE f_student SET school_id = 0 WHERE id > ( SELECT id FROM f_student WHERE school_id = M LIMIT 1 ) AND id < ( ( SELECT id FROM f_student WHERE school_id = M LIMIT 1 ) + N )
上面的sql是想將某個區(qū)間的數(shù)據(jù)進行修改,但是放到測試環(huán)境下一跑,報下面的錯誤:
[Err] 1093 – You can't specify target table ‘f_student' for update in FROM clause
意思很顯而易見了,說不能對進行查詢操作的表進行update操作,也就說我們的where條件中進行了子查詢,并且子查詢也是針對需要進行update操作的表的,mysql不支持這種查詢修改的方式。
解決方法
上網(wǎng)查了一下,針對這種問題可以通過”繞”的方式進行實現(xiàn),下面看sql語句。
UPDATE f_student SET school_id = 0 WHERE id > ( SELECT id FROM ( SELECT id FROM f_student WHERE school_id = M LIMIT 1 ) AS temp ) AND id < ( ( SELECT id FROM ( SELECT id FROM f_student WHERE school_id = M LIMIT 1 ) AS temp_1 ) + N )
ok,完全沒有問題。上面的sql相比于之前的sql只是在取id的時候繞了一下,通過一個子查詢的方式獲取到id,而不是直接進行獲取。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
相關文章
Navicat中如何導入數(shù)據(jù)庫SQL腳本并執(zhí)行
這篇文章主要給大家介紹了關于Navicat中如何導入數(shù)據(jù)庫SQL腳本并執(zhí)行的相關資料,Navicat是一個強大的MySQL數(shù)據(jù)庫管理和開發(fā)工具,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-07-07MySQL根據(jù)條件遷移數(shù)據(jù)的幾種方法實現(xiàn)
本文主要介紹了MySQL根據(jù)條件遷移數(shù)據(jù)的實現(xiàn),包括使用INSERT INTO SELECT、UPDATE、DELETE語句以及結(jié)合子查詢進行遷移,具有一定的參考價值,感興趣的可以了解一下2024-02-02MySQL數(shù)據(jù)庫查詢性能優(yōu)化策略
這篇文章主要介紹了MySQL數(shù)據(jù)庫查詢性能優(yōu)化的策略,幫助大家的工作學習提高MySQL數(shù)據(jù)庫的性能,感興趣的朋友可以了解下2020-08-08