带有where子句IN的SELECT语句不是在MySQL中读取变量

时间:2013-06-09 14:01:07

标签: mysql

我在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);

- 未选择任何记录;

- Test-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中,从表中选择say_aid不返回记录,但应该输出6条记录。 在Test-II中,具有硬编码IN值的相同查询返回6个记录输出。 执行期间没有错误。

1 个答案:

答案 0 :(得分:0)

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

where sd.said in (@group_saids);

这个:

where FIND_IN_SET(sd.said, @group_saids);