巨大的建築,總是由一木一石疊起來的,我們何妨做做這一木一石呢?我時常做些零碎事,就是爲此。
這是對的,但是我沒有說過這句話! —— 魯迅
問題
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表中查出來的,哎,這解釋器真是傻.