1. 程式人生 > >mysql在把子查詢結果作為刪除表中資料的條件,mysql不允許在子查詢的同時刪除原表資料

mysql在把子查詢結果作為刪除表中資料的條件,mysql不允許在子查詢的同時刪除原表資料

**

目標表和原表一致 MYSQL不支援如此操作

資料庫不能邊查詢邊刪除

**

delete  from push_msg_overview where id in (
 	select  id from push_msg_overview  where push_date+offset_day >= 20181031  
)

在該 sql 語句中由於子查詢中包含 push_msg_overview 表,但我們同時要刪除 push_msg_overview 表中的記錄,所以允許該語句時報如下錯誤:

1093-You can't specify target table 'push_msg_overview ' for update in FROM clause.

我們的一般思路就是,1、把子查詢的結果建立臨時表儲存。2、把這個臨時表作為原表刪除的條件。3、刪除表資料。

例項:

delete  from push_msg_overview where id in (
  select e. id  from (
	select id from push_msg_overview  where push_date+offset_day >= 20181031  
	) e
)