MySQL中用户定义变量的奇怪行为

时间:2011-05-10 15:56:24

标签: mysql user-variables

我注意到用户定义的变量有些奇怪:

假设我有这张表:

 num_table
+---------+
| numbers |
|    3    |
|    6    |
|    9    |
+---------+

我可以创建一个以逗号分隔的列表,并将其存储在用户定义的变量中,如下所示:

SELECT @var := GROUP_CONCAT `numbers` from num_table;

将值[{1}}分配给3,6,9

这是奇怪的部分。运行

@var

返回1,但正在运行

SELECT 3 IN (@var)

返回0.

在我看来它应该工作还是不工作。知道为什么它只适用于列表中的第一个数字吗?

2 个答案:

答案 0 :(得分:2)

您不能将IN ()与变量一起使用并将该变量视为列表 - 只能使用实际列表(可能是变量) - 即IN (1, 2, 3)IN (@var1, @var2, @var3)

如果@var包含'3,6,9',则两者都不起作用 - 所以我怀疑@var包含'3',但是 - 你可以验证其内容吗?

马丁可能会参与投射 - 我敢打赌'3' IN (@var)不会返回任何内容

答案 1 :(得分:1)

您不能将IN ()与字符串变量一起使用 - 但您可以使用FIND_IN_SET()来代替这一目的:

SELECT FIND_IN_SET(6, @var)

返回2 - 秒位置

SELECT FIND_IN_SET(7, @var)

返回NULL - 不匹配