mySQL - 使用存储过程结果来定义IN语句

时间:2010-11-17 18:26:32

标签: sql mysql stored-procedures

我想使用存储过程来定义select语句的IN子句。这是我正在尝试做的(简化版):

SELECT * FROM myTable WHERE columnName IN ( CALL myStoredProc )

myStoredProc在数据库中执行一些复杂的逻辑,并返回columnName的可能匹配值列表。上面的陈述显然不起作用。 select语句可以在另一个存储的prodecure中执行,如果这会产生影响。

这在mySQL中完全可以吗?

1 个答案:

答案 0 :(得分:0)

您当前的存储过程有哪些返回类型?你说的是“列表”,所以TEXT?

也许有一种更简单的方法,但你能做的一件事(在另一个存储过程中)是建立另一个查询。

要做到这一点,我们需要解决MySQL的两个限制:a)要在存储过程中执行动态SQL,它需要是一个预准备语句。 b)准备语句只能由用户变量创建。所以完整的SQL是:

SET @the_list = myStoredProc();
SET @the_query = CONCAT('SELECT * FROM myTable WHERE columnName IN (' , @the_list , ')');
PREPARE the_statement FROM @the_query;
EXECUTE the_statement;

如果您正在讨论从存储的例程返回结果集然后将其用作表,那是不可能的。您需要创建一个临时表来解决this limitation