我正在运行SELECT语句(数据库MySQL版本5.5.27在Windows 7下)与WHERE子句中的变量。它应该返回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的代码中,select from表said_aid不返回记录,但应该输出6条记录。对Test-II相同的查询使用硬编码的IN值返回6条记录输出。
您必须使用FIND_IN_SET(),因为IN
子句需要文字值,所以它不能处理字符串变量中的值,因此替换以下行:
where sd.said in (@group_saids);
:
where FIND_IN_SET(sd.said, @group_saids);