You can't specify target table 'table_A' for update in FROM clause

Mysql在del和update時含子查詢會報此錯

-->因爲在MYSQL裏,不能先select一個表的記錄,再按此條件進行更新和刪除同一個表的記錄

解決辦法是,將select得到的結果,再通過中間表select一遍,這樣就規避了錯誤,

這個問題只出現於mysql,mssql和oracle不會出現此問題

詳情看sql:

原報錯sql:

UPDATE table_A SET status=1 
WHERE A_id IN(
  SELECT order_id FROM table_A_B WHERE B_id=23
)

修改後的sql:

UPDATE table_A SET status=1
WHERE A_id IN(
SELECT a.id FROM (
 SELECT id FROM table_A_B WHERE B_id=23
) a)

相當於對內子循環起了一個別名

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章