我想在MySQL存储过程中构建动态 IN语句。我已经尝试了很多方法,但我无法得到有效的东西。这是我最接近成功的,但它只处理列表中的第一个值: 103 。
我更喜欢使用存储过程而不是在客户端完全构建这个SQL语句然后执行它。有没有人知道在存储过程中动态构建SQL语句的一般规则,特别是关于IN语句?
call foo2('103,104,105,106');
这是存储过程:
-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE `foo2`(
szList VARCHAR(256)
)
BEGIN
SELECT
E_Id, EX_Value
FROM
E
WHERE
EX_Value IN (szList);
END
答案 0 :(得分:1)
如何使用FIND_IN_SET for MySQL。我认为此链接可能会对您有所帮助(How to pass a list of IDs to MySQL stored procedure?)
关键部分是定义
szList as TEXT
并使用
FIND_IN_SET(Ex_Value, szlist)
而不是Ex_Value IN(szlist)