MySQL 存储过程使用 IN 应用过滤器并且过滤器值来自参数
MySQL Stored Procedured apply filter using IN and the filter value is coming from a parameter
如标题所述,我在使用 MySQL 存储过程中的运算符 (IN) 对查询结果应用简单过滤器时遇到问题。
存储过程的简单示例如下所示
DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_example`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_example`(
`filter_uid_value` TEXT
)
BEGIN
SELECT
a.id
, a.name
, a.uid
FROM
employee_example a
WHERE 1=1
AND a.uid IN (filter_uid_value)
END$$
DELIMITER;
所以当我调用这个存储过程时,例如像这样
CALL sp_example("du4jgjVRJGs,oKxU3SzV8CK");
过滤器不适用,我想知道如何解决这个问题
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_example`(
`filter_uid_value` TEXT
)
SELECT id, name, uid
FROM employee_example
WHERE FIND_IN_SET(uid, filter_uid_value);
不需要DELIMITER。
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_example`(
`filter_uid_value` TEXT
)
BEGIN
SET @sql := CONCAT( 'SELECT id, name, uid ',
'FROM employee_example ',
'WHERE uid IN ("',
REPLACE(filter_uid_value, ',', '","'),
'")' );
PREPARE stmt FROM @sql;
EXECUTE stmt;
DROP PREPARE stmt;
END;;
DELIMITER ;
如标题所述,我在使用 MySQL 存储过程中的运算符 (IN) 对查询结果应用简单过滤器时遇到问题。
存储过程的简单示例如下所示
DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_example`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_example`(
`filter_uid_value` TEXT
)
BEGIN
SELECT
a.id
, a.name
, a.uid
FROM
employee_example a
WHERE 1=1
AND a.uid IN (filter_uid_value)
END$$
DELIMITER;
所以当我调用这个存储过程时,例如像这样
CALL sp_example("du4jgjVRJGs,oKxU3SzV8CK");
过滤器不适用,我想知道如何解决这个问题
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_example`(
`filter_uid_value` TEXT
)
SELECT id, name, uid
FROM employee_example
WHERE FIND_IN_SET(uid, filter_uid_value);
不需要DELIMITER。
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_example`(
`filter_uid_value` TEXT
)
BEGIN
SET @sql := CONCAT( 'SELECT id, name, uid ',
'FROM employee_example ',
'WHERE uid IN ("',
REPLACE(filter_uid_value, ',', '","'),
'")' );
PREPARE stmt FROM @sql;
EXECUTE stmt;
DROP PREPARE stmt;
END;;
DELIMITER ;