首页 文章

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

提问于
浏览
1

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

DELIMITER $$ CREATE DEFINER = root @ localhost PROCEDURE 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
    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

    你不能像你想要的那样使用 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 ),但这会在编译查询时产生开销 .

相关问题