背景
有一個程序員員工表(code_user),包含用戶id、姓名、掌握的語言。
表數據如下:
+---------+-----------+----------+
| user_id | user_name | language |
+---------+-----------+----------+
| 1 | zs | js |
| 2 | ls | js |
| 3 | ww | js |
| 4 | mwf | java |
| 5 | ergou | java |
| 6 | sanliuzi | java |
+---------+-----------+----------+
現在公司裁掉了所有的java渣渣,要在員工表中刪除對應的數據。
delete from code_user where user_id in (
select user_id from code_user where language = "java"
);
執行sql,發現報錯。
ERROR 1093 (HY000): You can't specify target table 'code_user' for update in FROM clause
mysql不允許對一張表同時進行查詢和更新。那怎么辦呢?
解決方案
delete from code_user where user_id in (
select user_id from (
select user_id from code_user where language = "java"
) as tmp
);
執行sql,是可以刪成功的。
既然不允許對一張表同時進行查詢和更新,那就變成對兩個表進行查詢和更新。
上述語句就是將查詢結果生成一個派生表,然后對派生表進行查詢,然后對原表進行刪除,就ok了。