首页 > 数据库 >Mysql 100个表嵌套查询 存储过程

Mysql 100个表嵌套查询 存储过程

时间:2024-03-14 16:56:16浏览次数:46  
标签:set Mysql 个表 表名 100 selects 字段名

背景

  1. 业务销售订单会随机落在1~100表中,查询一个订单时需要1到100表依次去查询,增加手工重复操作和浪费时间。

  2. 查询未解冻数据时,需要过滤部分解冻的数据,此时需要用到嵌套查询。

 

一、根据订单号,循环1~100个表,查询出订单数据

CREATE DEFINER=`{数据库连接账号}`@`%` PROCEDURE `{数据库库名}`.`{存储过程名}`(

)

  SQL SECURITY INVOKER

begin

//定义变量

declare i int;

set i=1;

set @selects = "SELECT * FROM (";

while i<99 do

set @selects = concat(@selects,

"SELECT *,",i," FROM {表名}", i,     -- " FROM {表名}", i :此处是循环获取表名

" WHERE 字段名 = '订单号' UNION ALL ");

set i=i+1;

end while;

-- 查99个表

 

-- 查第100个表

set @selects = concat(@selects,

"SELECT *,",i," FROM  {表名}", i,

" WHERE 字段名 = '订单号' ");

 

-- 一共查100个表并排序

set @selects = concat(@selects,") a ");

PREPARE selects FROM @selects;

EXECUTE selects;

end

 

二、查询未解冻数据时,需要过滤部分解冻的数据

CREATE DEFINER=`{数据库连接账号}`@`%` PROCEDURE `{数据库库名}`.`{存储过程名}`(

)

  SQL SECURITY INVOKER

begin

//定义变量

declare i int;

set i=1;

set @selects = "SELECT * FROM (";

while i<99 do

set @selects = concat(@selects,

"SELECT *,",i," FROM {表名}", i,     -- " FROM {表名}", i :此处是循环获取表名

" WHERE 字段名 = '订单号'

and 字段名 not in (" "select 字段名 "," from {表名}", i, " where 字段名 = 数据 ")

UNION ALL ");

set i=i+1;

end while;

-- 查99个表

 

-- 查第100个表

set @selects = concat(@selects,

"SELECT *,",i," FROM  {表名}", i,

" WHERE 字段名 = '订单号'

and 字段名 not in (" "select 字段名 "," from {表名}", i, " where 字段名 = 数据 ")

");

 

-- 一共查100个表并排序

set @selects = concat(@selects,") a ");

PREPARE selects FROM @selects;

EXECUTE selects;

end

标签:set,Mysql,个表,表名,100,selects,字段名
From: https://www.cnblogs.com/chen-cherry/p/18073248

相关文章

  • MSSQL 查询每个表的占用空间大小
     SELECTt.NAMEASTableName,p.rowsASRowCounts,SUM(a.total_pages)*8ASTotalSpaceKB,SUM(a.used_pages)*8ASUsedSpaceKB,(SUM(a.total_pages)-SUM(a.used_pages))*8ASUnusedSpaceKBFROMsys.tablestI......
  • 数据库练习发生的error—— check the manual that corresponds to your MySQL server
    记录一下发生的错误。 checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear''id'),参考链接:完美解决ERROR1064(42000):YouhaveanerrorinyourSQLsyntax...near…_responsecode:420001064r......
  • MYSQL 是如何保证binlog 和redo log同时提交的?
    MYSQL一个事务在提交的时候能够保证binlog和redolog是同时提交的,并且能在宕机恢复后保持binlog和redolog的一致性。先来看看什么是redolog和binlog,以及为什么要保持它们的一致性。什么是redolog,binlogredolog是innodb引擎层产生的日志,MYSQL从磁盘读取数据的单位是一......
  • java毕业设计线上水果店系统app(springboot+mysql+jdk1.8+meven)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在现代社会,随着生活节奏的加快和健康饮食观念的普及,人们对于水果的需求日益增长。传统的水果购买方式通常需要在实体店铺中进行,这不仅耗费时间,而且在种类......
  • java毕业设计线上书城网站(springboot+mysql+jdk1.8+meven)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的不断发展,人们获取信息和知识的方式也在逐渐改变。传统的书店购书方式已经不能满足现代人快节奏的生活需求。线上书城网站的出现,为用户提......
  • mysql for update是锁表还是锁行
    https://www.cnblogs.com/waldron/p/18068079 在并发一致性控制场景中,我们常常用forupdate悲观锁来进行一致性的保证,但是如果不了解它的机制,就进行使用,很容易出现事故,比如forupdate进行了锁表导致其他请求只能等待,从而拖垮系统,因此了解它的原理是非常必要的,下面我们通过一系......
  • MySQL 怎么计算一个连接占用多少资源
    在MySQL中,准确计算单个连接所消耗的资源是比较复杂的,因为许多资源是被所有连接共享的,例如缓冲池、缓存等。然而,我们可以估算出单个连接的内存占用,以及它的CPU使用情况。计算单个连接的内存占用要估算单个MySQL连接占用的内存,我们可以考虑以下几个方面:全局缓冲区:全局缓冲区(如I......
  • mysql-约束
    1.总结 createtableuser( idintprimarykeyauto_incrementcomment'主键',namevarchar(10)notnulluniquecomment'姓名', ageintcheck(age>0&&age<=120)comment'年龄', statuschar(1)default'......
  • 安装配置MySQL
    安装配置MySQL主要包括以下步骤:1、检查并卸载旧版本的MySQL2、如果不使用Mariadb,则也需要卸载3、离线安装MySQLMySQL数据库安装在node3节点上,其他节点通过远程访问的方式使用MySQL数据库。在node3检查并卸载老版本的MySQL使用【rpm-qa】命令,查找以前是否装有mysql:[root......
  • Linux安装MySQL
    安装对于MySQL数据库的安装,我们将要使用rpm进行安装。那么首先我们先了解一下什么rpm?**RPM:**全称为Red-HatPackageManager,RPM软件包管理器,是红帽Linux用于管理和安装软件的工具。我们要通过rpm,进行MySQL数据库的安装,主要的步骤如下:1).检测当前系统是否安装过MySQL相......