我在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个记录输出。 执行期间没有错误。
答案 0 :(得分:0)
您必须使用FIND_IN_SET(),因为IN
子句需要文字值,因此它不适用于字符串变量中的值,因此请替换以下行:
where sd.said in (@group_saids);
这个:
where FIND_IN_SET(sd.said, @group_saids);