Home > database >  How can I use the value of a variable in an IN statement?
How can I use the value of a variable in an IN statement?

Time:01-27

example:

SET @numbers:= '1,2,3,4,5,6';

SELECT * FROM table WHERE t.number in (@numbers);

UPDATE table SET name = 'test' WHERE t.number in (@numbers);

How can I use the value of a variable in an IN statement? As in the request above

CodePudding user response:

You can't use IN on a CSV string like that.

But you can use it with FIND_IN_SET

SET @numbers:= '1,2,3,4,5,6';

UPDATE your_table t
SET name = 'test' 
WHERE FIND_IN_SET(t.number, @numbers) != 0;

SELECT * 
FROM your_table t
WHERE FIND_IN_SET(t.number, @numbers) != 0;

In MySql 8 you could also unfold such CSV string as a JSON_TABLE.
And use that as a query for the IN.

SET @numbers:= '1,2,3,4,5,6';

UPDATE your_table t
SET name = 'test'
WHERE t.number IN (SELECT num FROM JSON_TABLE(CONCAT('[',@numbers,']'),'$[*]' COLUMNS(num INT PATH '$'))nums); 

SELECT *
FROM your_table t
WHERE t.number IN (SELECT num FROM JSON_TABLE(CONCAT('[',@numbers,']'),'$[*]' COLUMNS(num INT PATH '$'))nums);
  •  Tags:  
  • Related