發(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ù)進(jìn)行修改,但是放到測試環(huán)境下一跑,報下面的錯誤:
[Err] 1093 – You can't specify target table ‘f_student' for update in FROM clause
意思很顯而易見了,說不能對進(jìn)行查詢操作的表進(jìn)行update操作,也就說我們的where條件中進(jìn)行了子查詢,并且子查詢也是針對需要進(jìn)行update操作的表的,mysql不支持這種查詢修改的方式。
解決方法
上網(wǎng)查了一下,針對這種問題可以通過”繞”的方式進(jìn)行實現(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,而不是直接進(jìn)行獲取。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
您可能感興趣的文章:- MySQL UPDATE更新語句精解
- Mysql聯(lián)表update數(shù)據(jù)的示例詳解
- 實例驗證MySQL|update字段為相同的值是否會記錄binlog
- mysql update語句的執(zhí)行過程詳解
- MySQL select、insert、update批量操作語句代碼實例
- Mysql update多表聯(lián)合更新的方法小結(jié)
- MySQL執(zhí)行update語句和原數(shù)據(jù)相同會再次執(zhí)行嗎
- mysql事務(wù)select for update及數(shù)據(jù)的一致性處理講解
- Mysql Update批量更新的幾種方式
- MySQL中參數(shù)sql_safe_updates在生產(chǎn)環(huán)境的使用詳解
- MYSQL updatexml()函數(shù)報錯注入解析
- mybatis執(zhí)行批量更新batch update 的方法(oracle,mysql兩種)
- 記一次MySQL更新語句update的踩坑