MySQL同じテーブルで、クエリの結果を削除
1154 ワード
背景
ユーザーID、名前、習得言語を含むプログラマー従業員テーブル(code_user)があります.
表のデータは次のとおりです.
現在、会社はjavaスラグをすべて削減し、従業員表から対応するデータを削除します.
sqlを実行し、エラーが検出されました.
mysqlでは、テーブルのクエリーと更新は許可されていません.どうすればいいの?
ソリューション
sqlを実行すると、削除に成功します.
1つのテーブルに対してクエリーと更新を同時に許可しない以上、2つのテーブルに対してクエリーと更新を行うことになります.
上記の文は、クエリーの結果を派生テーブルに生成し、派生テーブルをクエリーし、元のテーブルを削除することでokです.
ユーザー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です.