我在存储过程中使用了mysql。在strored过程中,我用IN()函数编写了select查询。我已经传递了函数内部的5值,但它只显示了第一个值数据。我的代码是
DELIMITER $$ CREATE DEFINER =
root
@localhost
程序pro1
(INreg_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);
实际结果是,
印度,西班牙,澳大利亚
但它显示的结果是,
印度
答案 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
),但这会在编译查询时产生开销。