我注意到用户定义变量有些奇怪:
假设我有这张表:
num_table
+---------+
| numbers |
| 3 |
| 6 |
| 9 |
+---------+
我可以创建一个逗号分隔的列表并将其存储在用户定义的变量中,如下所示:
SELECT @var := GROUP_CONCAT `numbers` from num_table;
这会将值 3,6,9
分配给 @var
。
这是奇怪的部分。运行
SELECT 3 IN (@var)
返回 1,但正在运行
SELECT 6 IN (@var)
返回 0。
在我看来,它要么有效,要么无效。知道为什么它只适用于列表中的第一个数字吗?
最佳答案
您不能将 IN ()
与变量一起使用并将该变量视为列表 - 只能使用实际列表(可能是变量) - 即 IN (1, 2 , 3)
或 IN (@var1, @var2, @var3)
如果 @var
包含“3, 6, 9”,两者都不应该工作 - 所以我怀疑 @var
包含“3”,不过 - 你能验证它的内容吗?
Martin 可能对类型转换有所了解 - 我敢打赌 '3' IN (@var)
什么都不返回
关于mysql - MySQL 中用户定义变量的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5952901/