mysql存储过程 返回 list结果集
思路
直接链接多个表返回结果集即可,先写成普通的sql调整好,不要输入参数,再写成存储过程,
不要用游标,否则会把你慢哭的


查询首先会从最外层select * from staff

在将每一行结果传递给子查询,传入第一行结果就是select staff_num from staff where staff_salary<(select avg(staff_salary from staff where staff_depart=‘经理’)),然后子查询的结果又返回给外层查询select staff_num from staff where staff_salary<9666。逐行逐行,直到结束。
关联子查询,外层与内层查询是信息是双向传递的。
2 创建商品检索存储过程t1
要求:输入商品名称或商品类别(要求模糊查询),输出商品编号,商品名称,商品价格,出厂日期,生产商,已购用户数量,最近一次购买用户姓名,最近一次购买时间
create procedure t1(in use_num varcharacter(10),in product_num varcharacter(20))
begin
declare tuser_addr1 varchar(100) ;
declare productsList_price1 numeric(10,2);
selecttuser_addr into tuser_addr1
from tUser
where tUser.tuser_num=use_num;
select productsList_price into productsList_price1
from factory.productsList
where productsList_num=product_num;
update tUser
set tuser_sum_expence=tuser_sum_expence+productsList_price1
where tuser_num=use_num;
insert into factory.tuserOrde(tuser_num,productsList_num,tuserorder_time,tuser_addr)
values(use_num,product_num,now(),tuser_addr1);
end
这个比较简单。
3 创建用户自定义函数:varchar fGetUserMaxProduct(用户账号)(在查询结果子表中在进行查询)
要求:输入用户账号,返回该用户购买最多的商品编号。
create function t3(user_num varchar(10)) returns varchar(20)
begin
declare products_num varchar(20);
select `productsList_num` into products_num from
(select count(`productsList_num`)as c1,`productsList_num`
from factory.tuserorder where tuser_num=user_num
group by `productsList_num`)as t1having max(c1);
return products_num;
end
分析:
将查询结果设成别名为t1 的表,再重t1的表中,在继续查询。
查询结果子表中,再查询
例如:
select a from (select a,b,c from table1 where…)as t1
从t1结果表中查询a
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。