mysql存储过程,如何循环取到多张表记录并合并输出 您所在的位置:网站首页 sql查询多张表数据量放在一个页面 mysql存储过程,如何循环取到多张表记录并合并输出

mysql存储过程,如何循环取到多张表记录并合并输出

2023-11-28 03:38| 来源: 网络整理| 查看: 265

编写mysql存储过程,循环的查询到表结构相同的多张表记录并将结果表合并输出。可以查询多天也可查询单天

直接实例代码与注释

CREATE PROCEDURE tableData1(in sTime VARCHAR(255),in eTime VARCHAR(255)) BEGIN #创建传入两个参数的存储过程,sTime开始时间,eTime结束时间 #定义变量 DECLARE date VARCHAR(255); declare sqlVar varchar(21845); declare rest int; declare tableName varchar(1024); #给初始值 sqlVar为空字符串,因为下边要拼接sql语句 set rest = 100; set sqlVar=''; #当开始时间等于结束时间时,只拼接一次sql语句-实现可以只查询一天数据 if sTime = eTime THEN SET date = DATE_FORMAT(sTime,"%Y-%m-%d"); set sqlVar=CONCAT(sqlVar," (SELECT * FROM data_detail_",sTime," WHERE XXX "); ELSE #rest初始值是随便给的大于0的值。所以一定会进入循环。接下来在下边使用函数DATEDIFF用结束时间减去开始时间 #给rest重新赋值,当大于0时说明还没结束继续拼接sql,当等于或小于零时说明应该结束了,不需要继续往下拼接sql while rest > 0 do #转换日期格式,根据您自己的表结构来改,我是需要的 SET date = DATE_FORMAT(sTime,"%Y-%m-%d"); #使用开始时间拼接上字符串成为表名 set tableName=CONCAT('data_detail_',sTime); #查询是否存在当前表名,赋值个数给cnt select count(1) from information_schema.tables where table_name = tableName into @cnt; #判断表名是否存在,当表不存在时直接跳过,不判断的话会报错 if @cnt != 0 then #最最最重要的一点,当结束时间减去开始时间为1时,需要走else拼接上后边的的union all 。 #当结束时间减去开始时间为1时,说明已经到达结束时间的前一天,并且在最后DATE_ADD将前一天日期加1已经到达结束时间。最后不需要再拼接上一个union all if rest=1 then set sqlVar=CONCAT(sqlVar," (SELECT * FROM data_detail_",sTime," WHERE XXX )"); ELSE set sqlVar=CONCAT(sqlVar," (SELECT FROM data_detail_",sTime," WHERE XXX )",' UNION all'); END IF; END if; #判断到达某日期,当rest为1时说明已经到达结束日期前一天 set rest = DATEDIFF(eTime,sTime); #当前日期加1 set sTime = DATE_FORMAT(DATE_ADD(sTime,INTERVAL 1 day),'%Y%m%d'); #结束循环与判断 END while; END if; #赋值用户变量 set @v_s=sqlVar; #预定义sql语句 prepare stmt from @v_s; #执行预定义sql语句 EXECUTE stmt; #释放资源 DEALLOCATE PREPARE stmt; end;

call tableData1(‘20211006’,‘20211008’); 结果长这个样子 运行结果

1.创建存储过程语法: CREATE PROCEDURE 存储过程名(参数列表) BEGIN 存储过程体(一组合法的SQL语句) END 2.变量的定义与赋值: 局部变量 DECLARE variable_name datatype(size) DEFAULT default_value; DECLARE相当于关键字,有点类似var,表示定义一个变量;然后variable_name是你指定的变量名称;datatype表示数据类型而括号内的size表示对应类型的格式比如varchar(50)这样子,这里需要注意的是datatype只能是MySql支持的那些基本数据类型;DEFAULT关键字指明了变量的默认值为default_value。 通过SET赋值: SET variable_name = XXX 用户变量 用户变量不需要声明,可以直接使用,用户变量以@var_name的形式命名变量,变量名必须以@开头 赋值语法; set @varName=value;

只说了我用到的两种变量,其他变量查阅其他资料哦

3.While循环语句结构: while(表达式) do … end while; 与其他语言while循环大同小异了其实,不难理解当表达式结果为false时退出循环 4.if判断语句: IF expression THEN statements; ELSE else-statements; END IF; 5.union与union all 的区别 对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,Union All不会去除重复记录



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有