MySQL在同一個表上,刪除查詢出來的結果


背景

有一個程序員員工表(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了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM