如何在存储过程中使用IN()函数?

时间:2014-09-17 10:35:13

标签: mysql stored-procedures

我在存储过程中使用了mysql。在strored过程中,我用IN()函数编写了select查询。我已经传递了函数内部的5值,但它只显示了第一个值数据。我的代码是

  

DELIMITER $$ CREATE DEFINER = root @ localhost程序pro1(IN   reg_id VARCHAR(50))

     

BEGIN

     

SELECT COUNT(master_country_id)AS num FROM master_country WHERE master_region_id IN(reg_id)ORDER BY master_country_id DESC;

     

END $$

     

DELIMITER;

这些国家是,

1 - 印度

2 - 澳大利亚

3 - 加拿大

4 - 西班牙

5 - 斯里兰卡

我打电话给程序是

  

CALL pro1(1,4,2);

实际结果是,

印度,西班牙,澳大利亚

但它显示的结果是,

印度

2 个答案:

答案 0 :(得分:1)

DELIMITER $$ CREATE DEFINER=root@localhost PROCEDURE pro1(reg_id VARCHAR(50))

BEGIN

SELECT COUNT(master_country_id) AS num FROM master_country WHERE master_region_id REGEXP (reg_id) ORDER BY master_country_id DESC;

END$$

DELIMITER ;

你可以将你的proc称为CALL pro1('1|4|2');

答案 1 :(得分:0)

您无法按照自己想要的方式使用in。对于代码的表达方式,存储过程仅在主区域与完整字符串匹配时才会找到匹配项。因此,如果您传入1,2,3,则匹配恰好位于1,2,3 - 而不是每个元素。

您可以使用find_in_set()获得所需内容:

BEGIN

SELECT COUNT(master_country_id) AS num
FROM master_country
WHERE find_in_set(reg_id, master_region_id) > 0
ORDER BY master_country_id DESC;

END$$

这样可行,但它无法使用索引。

您也可以使用动态SQL(prepare / exec),但这会在编译查询时产生开销。