select * from user where id in (Ids);
说明,Ids是存储过程传过来的一个拼接的数字字符串,(1,2,3,4,5),现在的问题是。这样in之后
它只会找id=1的记录。后面的记录找不出来。不知为何。还请各位大神指点
,为什么会这麼拼接。是为我的id是一个临时表里。不能用来关联。因为存储过程里有狠多
地方用到Ids,临时表只能select一次。所以用了这个方法。
这是拼接语句varCampId是动态查询的。根据条件。可能一个。可能多个。
SET @tmpCampIds = CONCAT(@tmpCampIds, varCampId, ',');
可以专门写一个函数,传入一个参数,函数里面直接拼接参数里面的值
要把ids分开传进来,否则mysql会认为它是个整体,也就是一个id
例如: select * from user where id in (Id1,Id2,Id3);
这种你可以用预编译
SET @sel_1 = 'select * from ls_boutique where rec_id in ';
SET @sel_2 = '(1,2)';
SET @sentence = CONCAT(@sel_1,@sel_2);
PREPARE stmt FROM @sentence;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
是你拼接的字符串的问题,你可以试着在mysql里面直接运行sql语句:
第一句:select * from user where id in (1,2,3,4,5);
第二句:select * from user where id in ('1,2,3,4,5');
第一句是没问题的,第二局只会输出id是1的数据,区别就在于,in后面的值一个是正常输入的数字,另一个是字符串,数据类型已经变了。
试试FIND_IN_SET(1,'1,2,3,4,5')这个函数
反向思维not in
你传进来的只是第一个字符串,select * from user where id in (Ids);变成select * from user where id in (‘1’,‘2’,‘3’,‘4’,‘5’);
不行的话select * from user where id in (int(‘1’),int(‘2’),int(‘3’),int(‘4’),int(‘5’)); 我用的是db2