Suppose I have this table:
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);
I want to run a query like this:
SELECT distinct @u := usr FROM t_user WHERE grp < 6;
To hold the ids of a bunch of users and use the result on a delete
statement that will delete all those users:
delete from t_user where usr in ( @u );
The problem is that each time i run these two statements the first listed user is deleted and not all of them as I wanted.
EDIT
I can't simply run everything on a single query. I really want to know how to do it separately.
EDIT²
I followed @juergen instructions and tried using Temporary tables:
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;
I searched and found some similar answers, but i don't want to build a string and use it on my delete statement. I want something simpler.
- mysql using user-defined variable in where clause
- MySQL: Using variable on a WHERE IN clause
- In MySQL how do I use a user defined variable in a WHERE IN clause?
How to store the results from a query into a temporary table: - Create table variable in MySQL