我使用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 回答
你可以把你的proc称为
CALL pro1('1|4|2');
你不能像你想要的那样使用
in
. 对于代码的表达方式,存储过程仅在主区域与完整字符串匹配时才会找到匹配项 . 所以,如果你传入1,2,3
,那么匹配恰好是1,2,3
- 而不是每个元素 .你可以使用
find_in_set()
得到你想要的东西:这有效,但它无法使用索引 .
您也可以使用动态SQL(
prepare
/exec
),但这会在编译查询时产生开销 .