带有IN语句的存储过程(mysql)

时间:2014-05-17 16:28:33

标签: mysql stored-procedures

我有一个像

这样的查询
Select id,name,... FROM table WHERE id IN (?)

查询实际上更复杂的是连接和另一个(?)具有相同的ID。我被告知要把它放在存储过程上以便于管理和更安全,但是mysql不支持数组,所以我不确定最好的方法是什么,考虑到我不知道我将要通过多少身份证。我见过人们传递一个字符串。这是唯一的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用临时表。虽然这个答案没有高度投票,但我认为使用字符串参数是首选方式(17票对2票)(见链接)。临时表的答案取自另一个问题:Pass array to MySQL stored routine

  

使用临时表的连接。你不需要通过临时的   表到函数,它们是全局的。

create temporary table ids( id int ) ;
insert into ids values (1),(2),(3) ;

delimiter //
drop procedure if exists tsel //
create procedure tsel() -- uses temporary table named ids. no params
READS SQL DATA
BEGIN
  -- use the temporary table `ids` in the SELECT statement or
  -- whatever query you have
  select * from Users INNER JOIN ids on userId=ids.id ;
END //
DELIMITER ;

CALL tsel() ; -- call the procedure