我想做这个
set @a =(1,2,3);
select * from mytable where somefield in @a;
但是mysql不喜欢它。
我该怎么做?
最佳答案
解决这个问题的一种方法
SET @a = '1,2,3';
SELECT *
FROM mytable
WHERE FIND_IN_SET(somefield, @a) > 0;
注意:这将有效地导致全面扫描。
<小时/>恕我直言,您最好不要包含字符串的用户变量
SELECT *
FROM mytable t JOIN
(
SELECT 1 somefield UNION ALL
SELECT 2 UNION ALL
SELECT 3
) q
ON t.somefield = q.somefield;
<小时/>
还有一个选择是利用动态 SQL
SET @a = '1,2,3';
SET @sql = CONCAT('SELECT * FROM mytable WHERE somefield IN(', @a, ')');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
这里是SQLFiddle 所有查询的演示
关于mysql - 如何创建可在集合表达式中使用的用户定义变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20890797/