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

标签 mysql user-variables

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

假设我有这张表:

 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/

相关文章:

MySQL select - 按组获取计数

mysql - 由于用户变量太长而无法运行准备好的语句?

mysql - 使用用户变量对行编号时的保证

mysql - 有没有办法在 CREATE TABLE 语句中使用用户定义的变量作为列长度?

mysql - 在 MySQL 查找表中删除重复的多对多关系

python - 强制 Django 测试将模型写入数据库

mysql - SQL查询获取最近的交易日期

javascript - 通过AJAX从$_SESSION发送变量到PHP进行密码更改,怎么做?

mysql:根据另一列的值将列设置为上一行的值

javascript - 当使用 ajax 获取 php 文件时,使用来自另一个文件的 PHP 变量