發(fā)現(xiàn)問題
最近在處理一些數(shù)據(jù)庫中數(shù)據(jù)的時(shí)候,寫了下面的這一條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是想將某個(gè)區(qū)間的數(shù)據(jù)進(jìn)行修改,但是放到測(cè)試環(huán)境下一跑,報(bào)下面的錯(cuò)誤:
[Err] 1093 – You can't specify target table ‘f_student' for update in FROM clause
意思很顯而易見了,說不能對(duì)進(jìn)行查詢操作的表進(jìn)行update操作,也就說我們的where條件中進(jìn)行了子查詢,并且子查詢也是針對(duì)需要進(jìn)行update操作的表的,mysql不支持這種查詢修改的方式。
解決方法
上網(wǎng)查了一下,針對(duì)這種問題可以通過”繞”的方式進(jìn)行實(shí)現(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的時(shí)候繞了一下,通過一個(gè)子查詢的方式獲取到id,而不是直接進(jìn)行獲取。
總結(jié)
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com