次のテーブルがあるとします。
drop table if exists t_user;
CREATE TABLE t_user (usr int, grp int);
INSERT INTO t_user VALUES (123456, 5);
INSERT INTO t_user VALUES (111111, 5);
INSERT INTO t_user VALUES (111311, 5);
INSERT INTO t_user VALUES (122111, 5);
INSERT INTO t_user VALUES (111111, 5);
INSERT INTO t_user VALUES (111211, 5);
INSERT INTO t_user VALUES (113211, 5);
INSERT INTO t_user VALUES (115311, 5);
INSERT INTO t_user VALUES (122253, 3);
INSERT INTO t_user VALUES (222331, 6);
INSERT INTO t_user VALUES (118811, 3);
INSERT INTO t_user VALUES (112111, 6);
INSERT INTO t_user VALUES (213111, 6);
INSERT INTO t_user VALUES (343321, 7);
INSERT INTO t_user VALUES (114431, 2);
INSERT INTO t_user VALUES (115111, 8);
INSERT INTO t_user VALUES (324353, 3);
次のようなクエリを実行したい:
SELECT distinct @u := usr FROM t_user WHERE grp < 6;
一連のユーザーの ID を保持し、delete
それらのユーザーをすべて削除するステートメントで結果を使用するには、次のようにします。
delete from t_user where usr in ( @u );
問題は、これらの 2 つのステートメントを実行するたびに、最初にリストされたユーザーが削除され、すべてのユーザーが削除されるわけではないことです。
編集
1 つのクエリですべてを単純に実行することはできません。私は本当にそれを個別に行う方法を知りたいです。
編集²
@juergen の指示に従い、一時テーブルを使用してみました。
CREATE TEMPORARY TABLE t_temp (id int);
INSERT INTO t_temp SELECT DISTINCT usr FROM t_user WHERE grp < 6;
DELETE FROM t_user WHERE usr IN ( SELECT * FROM t_temp );
DROP TABLE t_temp;
検索して同様の回答をいくつか見つけましたが、文字列を作成して削除ステートメントで使用したくありません。もっとシンプルなものが欲しい。
クエリの結果を一時テーブルに保存する方法: - MySQL でテーブル変数を作成する