簡體   English   中英

帶IN語句的存儲過程(mysql)

[英]Stored Procedure with a IN statement (mysql)

我有一個查詢

Select id,name,... FROM table WHERE id IN (?)

使用聯接和另一個具有相同ID的(?),查詢實際上更加復雜。 我被告知將其放在存儲過程中,以使其更易於管理和安全,但是mysql不支持數組,因此我不確定這樣做是最好的方法,因此我不確定知道我必須通過多少個ID。 我見過有人通過弦。 這是唯一的方法嗎?

您可以使用臨時表。 盡管此答案的投票不高,所以我認為使用字符串參數是首選方法(17票對2票)(請參閱鏈接)。 臨時表的答案來自另一個問題:將數組傳遞給MySQL存儲例程

對臨時表使用聯接。 您不需要將臨時表傳遞給函數,它們是全局的。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM