MySQL同じテーブルで、クエリの結果を削除

1154 ワード

背景
ユーザーID、名前、習得言語を含むプログラマー従業員テーブル(code_user)があります.
表のデータは次のとおりです.
+---------+-----------+----------+
| 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を実行すると、削除に成功します.
1つのテーブルに対してクエリーと更新を同時に許可しない以上、2つのテーブルに対してクエリーと更新を行うことになります.
上記の文は、クエリーの結果を派生テーブルに生成し、派生テーブルをクエリーし、元のテーブルを削除することでokです.