1

我正在使用 WHERE 子句中的变量运行 SELECT 语句(Windows 7 下的数据库 MySQL 版本 5.5.27)。它应该返回 6 条记录,但它没有。下面是一个简单的测试代码。

-- Test-I
SET @group_saids := (SELECT REPLACE(
                                    '''ClicPlan - España|ClicPlan - Francia|ClicPlan - UK|ClicPlan - Belgique|ClicPlan - Argentina|Clicplan - Turkey'''
                                    ,'|',"','") as aids_list from dual);

select @group_saids from dual;


select sd.aid
FROM said_aid sd
where sd.said in (@group_saids);

-- 没有选择记录;

-- 测试-II

select sd.aid
FROM said_aid sd
where sd.said in ('ClicPlan - España','ClicPlan - Francia','ClicPlan - UK',
                  'ClicPlan - Belgique','ClicPlan - Argentina',
                  'Clicplan - Turkey');

aid
----
3045
3253
3254
3260
3268
3270

在上面Test-I的代码中,select from table said_aid不返回记录,应该是6条记录输出。使用硬编码的 IN 值对 Test-II 相同的查询返回 6 条记录输出。执行期间没有错误。

4

1 回答 1

0

您必须使用FIND_IN_SET(),因为该IN子句需要文字值,因此它不适用于字符串变量中的值,因此请替换以下行:

where sd.said in (@group_saids);

对于这个:

where FIND_IN_SET(sd.said, @group_saids);
于 2013-06-09T14:10:23.373 回答