1

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

假设我有这张桌子:

 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。

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

4

2 回答 2

2

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

@var如果包含 '3, 6, 9'也不应该工作- 所以我怀疑@var包含'3' - 你能验证它的内容吗?

马丁可能会对演员阵容有所了解 - 我敢打赌'3' IN (@var)一无所获

于 2011-05-10T16:01:50.173 回答
1

您不能IN ()与字符串变量一起使用 - 但您可以使用FIND_IN_SET(),这正是这个目的:

SELECT FIND_IN_SET(6, @var)

返回 2 - 第二个位置

SELECT FIND_IN_SET(7, @var)

返回 NULL - 不匹配

于 2012-07-09T22:38:58.153 回答