我注意到用户定义的变量有些奇怪:
假设我有这张表:
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.
在我看来它应该工作还是不工作。知道为什么它只适用于列表中的第一个数字吗?
答案 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 - 不匹配