MySQL 在存储过程中使用 WHERE IN ()
MySQL Using WHERE IN () in STORED PROCEDURE
我在两个 table 之间建立了多对多关系(事件和集合)。
我正在构建一个 PHP 应用程序并希望创建一个存储过程,该存储过程采用一个或多个集合名称和 returns table 作为集合一部分的事件.
这个有效
使用硬编码集合名称的测试有效,但显然不是我想要的。
DROP PROCEDURE `test`;
CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(IN `name` VARCHAR(255) CHARSET utf8) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER BEGIN
SELECT e.name, e.start, e.end, e.description, c.name AS collection FROM events AS e
INNER JOIN events_collections AS ec
ON e.id = ec.event_id
INNER JOIN collections AS c
ON c.id = ec.collection_id
WHERE c.name IN ('Inventors', 'Philosophers');
END
我试过的
我四处搜索并找到了这些:
how to use WHERE IN mysql stored procedure
https://www.tutorialspoint.com/working-with-where-in-in-a-mysql-stored-procedure
在我的例子中,这将转换为以下代码:
DROP PROCEDURE `get_collection`;
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_collection`(IN `coll_name` VARCHAR(255) CHARSET utf8) NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER BEGIN
SET @Query = CONCAT('SELECT e.name, e.start, e.end, e.description, c.name AS collection FROM events AS e
INNER JOIN events_collections AS ec
ON e.id = ec.event_id
INNER JOIN collections AS c
ON c.id = ec.collection_id
WHERE c.name IN (',`coll_name`,')');
PREPARE stmt FROM @Query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
调用过程时...
CALL get_collection('Inventors, Philosophers')
...它 returns 一个错误
#1054 - Unknown column 'Inventors' in 'where clause'
我不明白哪里出了问题,非常感谢您提供一些意见。
您需要引用字符串变量,例如:
CALL get_collection("'Inventors', 'Philosophers'");
我在两个 table 之间建立了多对多关系(事件和集合)。
我正在构建一个 PHP 应用程序并希望创建一个存储过程,该存储过程采用一个或多个集合名称和 returns table 作为集合一部分的事件.
这个有效
使用硬编码集合名称的测试有效,但显然不是我想要的。
DROP PROCEDURE `test`;
CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(IN `name` VARCHAR(255) CHARSET utf8) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER BEGIN
SELECT e.name, e.start, e.end, e.description, c.name AS collection FROM events AS e
INNER JOIN events_collections AS ec
ON e.id = ec.event_id
INNER JOIN collections AS c
ON c.id = ec.collection_id
WHERE c.name IN ('Inventors', 'Philosophers');
END
我试过的
我四处搜索并找到了这些:
how to use WHERE IN mysql stored procedure
https://www.tutorialspoint.com/working-with-where-in-in-a-mysql-stored-procedure
在我的例子中,这将转换为以下代码:
DROP PROCEDURE `get_collection`;
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_collection`(IN `coll_name` VARCHAR(255) CHARSET utf8) NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER BEGIN
SET @Query = CONCAT('SELECT e.name, e.start, e.end, e.description, c.name AS collection FROM events AS e
INNER JOIN events_collections AS ec
ON e.id = ec.event_id
INNER JOIN collections AS c
ON c.id = ec.collection_id
WHERE c.name IN (',`coll_name`,')');
PREPARE stmt FROM @Query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
调用过程时...
CALL get_collection('Inventors, Philosophers')
...它 returns 一个错误
#1054 - Unknown column 'Inventors' in 'where clause'
我不明白哪里出了问题,非常感谢您提供一些意见。
您需要引用字符串变量,例如:
CALL get_collection("'Inventors', 'Philosophers'");