我用单引号将逗号分隔的字符串
select * from demoProject WHERE id IN(1,2,3);
set @ids := "'1,2,3'"; select * from demoProject WHERE id IN(@ids)
第一个查询工作正常,但第二个查询仅获取关联ID为“1”的数据。第二次查询我错在哪里?
答案 0 :(得分:0)
尝试从
更改您的IDset @ids := "'1,2,3'";
到
set @ids := "'1','2','3'";
答案 1 :(得分:0)
它不起作用,因为@ids
被视为字符串。隐式转换为整数将始终只是第一个数字。
使这项工作的唯一方法是使用预准备语句(在这种情况下必须在存储过程中使用):
DELIMITER $$
CREATE PROCEDURE sp_prep_stmt(IN ids int)
BEGIN
SET @sql = 'select * from demoProject WHERE id IN(?);';
PREPARE stmt FROM @sql;
EXECUTE stmt USING ids;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
然后使用
执行该过程CALL sp_prep_stmt('1, 2, 3');
答案 2 :(得分:0)
此处的问题是您将STRING插入IN语句,以便获得条件:id IN('1,2,3')
。在这种情况下,您应该使用动态sql。
同样在MySQL中,您可以使用FIND_IN_SET()函数在逗号分隔的STRING中查找数字。所以它可以在这里提供帮助:
set @ids := "'1,2,3'"; select * from demoProject WHERE FIND_IN_SET(id,@ids);