MySQL技巧系列之一:如何把一个由多个id拼接而成的id串作为参数传给存储过程

文章介绍了在MySQL中,如何正确处理将由多个id组成的字符串作为参数传递给存储过程,避免直接使用可能导致错误的IN操作,而是需要通过字符串拼接形成完整的SQL语句并执行。
摘要由CSDN通过智能技术生成

MySQL技巧系列之一:如何把一个由多个id拼接而成的id串作为参数传给存储过程

在存储过程的编写时,有时我们会想传一个id串进存储过程,传进去很简单,但是传进去后怎么用呢?
假设有如下测试表:
在这里插入图片描述
例子的查询也很简单
SELECT SUM(amt) 金额
FROM my_test_table WHERE auto_id IN (2,3,5) LIMIT 0,1;
在这里插入图片描述
好了,下面进入主题,如何把’2,3,5’当作一个参数传进存储过程,并实现这个查询呢?
我们第一想法就是
SET @p_idList = ‘2,3,5’;
SELECT SUM(amt) 金额
FROM my_test_table WHERE auto_id IN (@p_idList) LIMIT 0,1;
结果是错误的
在这里插入图片描述
显然不能把串简单的放进去,'2,3,5’它会认为是一个id,结果容错取到了2,所以合计它算出40。
正确的方法是把语句按字符串拼接的方法拼接起来,然后执行即可:
在这里插入图片描述
还可以把查询结果传给一个变量,触类旁通。
在这里插入图片描述
SET @p_idList = ‘2,3,5’;
SET @exec_sql = CONCAT('SELECT SUM(amt) INTO @amt ',
‘FROM my_test_table WHERE auto_id IN (’, @p_idList, ') ', ’ LIMIT 0,1 ');
PREPARE aaa FROM @exec_sql;
EXECUTE aaa;
DEALLOCATE PREPARE aaa;
SELECT @amt;

妙!高!实在是高!

总结:把一个由多个id拼接而成的id串当作参数传给存储过程后,不能简单放进查询中,应拼接成一个语句,通过EXECUTE 执行拼接的语句。

加粉丝看
MySQL技巧系列之《未经证实的葵花宝典》:一篇可以当饭吃的MySQL文章,值得收藏

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值