mysql中錯誤:1093-Youcan’tspecifytargettableforupdateinFROMclause的解決方法
來源:懂視網
責編:小采
時間:2020-11-09 20:39:47
mysql中錯誤:1093-Youcan’tspecifytargettableforupdateinFROMclause的解決方法
mysql中錯誤:1093-YoucantspecifytargettableforupdateinFROMclause的解決方法:發現問題 最近在處理一些數據庫中數據的時候,寫了下面的這一條sql語句: UPDATE f_student SET school_id = 0 WHERE id > ( SELECT id FROM f_student WHERE school_id = M LIMIT 1 ) AND id < ( ( SEL
導讀mysql中錯誤:1093-YoucantspecifytargettableforupdateinFROMclause的解決方法:發現問題 最近在處理一些數據庫中數據的時候,寫了下面的這一條sql語句: UPDATE f_student SET school_id = 0 WHERE id > ( SELECT id FROM f_student WHERE school_id = M LIMIT 1 ) AND id < ( ( SEL

發現問題
最近在處理一些數據庫中數據的時候,寫了下面的這一條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是想將某個區間的數據進行修改,但是放到測試環境下一跑,報下面的錯誤:
[Err] 1093 – You can't specify target table ‘f_student' for update in FROM clause
意思很顯而易見了,說不能對進行查詢操作的表進行update操作,也就說我們的where條件中進行了子查詢,并且子查詢也是針對需要進行update操作的表的,mysql不支持這種查詢修改的方式。
解決方法
上網查了一下,針對這種問題可以通過”繞”的方式進行實現,下面看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,而不是直接進行獲取。
總結
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com
mysql中錯誤:1093-Youcan’tspecifytargettableforupdateinFROMclause的解決方法
mysql中錯誤:1093-YoucantspecifytargettableforupdateinFROMclause的解決方法:發現問題 最近在處理一些數據庫中數據的時候,寫了下面的這一條sql語句: UPDATE f_student SET school_id = 0 WHERE id > ( SELECT id FROM f_student WHERE school_id = M LIMIT 1 ) AND id < ( ( SEL