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表中查出来的,哎,这解释器真是傻.

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