mysql 通過當前表條件搜索結果刪除 [HY000][1093]

巨大的建築,總是由一木一石疊起來的,我們何妨做做這一木一石呢?我時常做些零碎事,就是爲此。
這是對的,但是我沒有說過這句話! —— 魯迅

問題

mysql 通過當前表的搜索結果刪除,不支持,如下:

delete from truck_position where truck_id in (
    select tp.truck_id from truck_position tp
       where not exists(select 1 from truck_base tb where tb.id = tp.truck_id)
)

由於 truck_id 是通過 truck_postion表查詢出來的,所以刪除的時候不能刪除,當然,oracle可以,這應該是mysql的一個bug。
執行會報錯如下:

[HY000][1093] You can't specify target table 'truck_position' for update in FROM clause

解決方法

在select 外面包裹一層,就可以了,比如上面的處理方法:

delete from truck_position where truck_id in (
   select truck_id from 
       (select tp.truck_id from truck_position tp
              where not exists(select 1 from truck_base tb where tb.id = tp.truck_id)) 
   as a
)

這樣他認爲是從a表中查出來的,而不是從truck_position表中查出來的,哎,這解釋器真是傻.

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