假设我有这张桌子:
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 );
问题是每次我运行这两个语句时,第一个列出的用户都会被删除,而不是我想要的所有用户。
编辑
我不能简单地在单个查询上运行所有内容。我真的很想知道如何分开做。
编辑²
我按照@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 中创建表变量