例如我有一个表名为TABLE
并且它具有命名FIELD
与值和的单个字段。运行此语句用户定义会话变量()函数返回意想不到的结果
SELECT GROUP_CONCAT(`FIELD`)
INTO @LIST
FROM `TABLE`;
和
SELECT @LIST;
回报
1,2
然后我做一个IF()声明
个SELECT IF (1 IN(@LIST),"TRUE","FALSE");
回报
TRUE
但当我运行这个
SELECT IF (2 IN(@LIST),"TRUE","FALSE");
返回
FALSE
让我试试这个声明一点点调试
SELECT IF (2 IN(1,2),"TRUE","FALSE");
,并返回我的预期值
TRUE
那么,有没有东西,我错过了什么?我需要它返回TRUE。
在你的语句,'@ LIST'实际上相当于一个字符串文字''1, 2''。但是它正在数值上下文中进行评估,MySQL正在评估它等于整数'1'。 (尝试'SELECT @ LIST + 0'和'SELECT @ LIST + 4',看看返回的是什么,所以,你的谓词有效地是'SELECT 1 IN(1)'。在单引号中,'SELECT'1'IN '1,2')'结果将会有所不同**底线:**字符串内的**逗号**(不管字面量还是udv)是**不会被解释为SQL文本的一部分。你可以在字符串文字或udv上使用字符串比较函数,例如'FIND_IN_SET' – spencer7593 2014-09-25 03:48:26