程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql中錯誤:1093-You can’t specify target table for update in FROM clause的處理辦法

mysql中錯誤:1093-You can’t specify target table for update in FROM clause的處理辦法

編輯:MySQL綜合教程

mysql中錯誤:1093-You can’t specify target table for update in FROM clause的處理辦法。本站提示廣大學習愛好者:(mysql中錯誤:1093-You can’t specify target table for update in FROM clause的處理辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是mysql中錯誤:1093-You can’t specify target table for update in FROM clause的處理辦法正文


發現問題

最近在處置一些數據庫中數據的時分,寫了上面的這一條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,而不是直接停止獲取。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或許任務能帶來一定的協助,假如有疑問大家可以留言交流。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved