Mysql-Where IN子句未正确选择数据


Mysql - Where IN clause not select data properly

我有一个逗号分隔的字符串,带有单引号

  1. select * from demoProject WHERE id IN(1,2,3);

  2. set @ids := "'1,2,3'"; select * from demoProject WHERE id IN(@ids)

第一个查询工作正常,但第二个查询仅获取关联id为"1"的数据。第二个查询哪里错了?

这里的问题是在IN语句中插入一个STRING,从而得到条件: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);

尝试从更改您的id

set @ids := "'1,2,3'";

set @ids := "'1','2','3'";

它不起作用,因为@ids被视为字符串。隐式转换为integer将始终只得到第一个数字。

实现这一点的唯一方法是使用准备好的语句(在这种情况下,必须在存储过程中使用):

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');