mysql一张表拆成多张表思路方案实现
起始是同学有个需求,怎么实现一张拆成多张表,同时数据也拆好。所有如下探究,简化数据和例子
1、先决条件
图示
mysql 数据库
mysql初始化数据
create table A (no int auto_incrementprimary key,name varchar(30) null,de varchar(30) null );INSERT INTO A (no, name, de) VALUES (1, '赵', '部门一'); INSERT INTO A (no, name, de) VALUES (2, '钱', '部门一'); INSERT INTO A (no, name, de) VALUES (3, '孙', '部门一'); INSERT INTO A (no, name, de) VALUES (4, '李', '部门二'); INSERT INTO A (no, name, de) VALUES (5, '周', '部门二'); INSERT INTO A (no, name, de) VALUES (6, '吴', '部门二'); INSERT INTO A (no, name, de) VALUES (7, '郑', '部门三'); INSERT INTO A (no, name, de) VALUES (8, '王', '部门三');
注释
- 创建一张表A, 三个字段,no:编号,name:姓名, de:部门名
需求按de(部门)拆成多张表,暂且以de的值为表名,sql语句怎么实现?
效果图
2、思路
- mysql有create select 语法,只是支持生一张表,但是这个是不确定多少个部门的
- 利用select语句自动生成 create select 语句,复制一下就完成分表操作
3、实操
3.1、create select 语句
create table 新表名 select 字段1, 字段2 from 原表名 where 条件;例子(比如分开部门一所有数据):
create table 部门一 select no, name from A where de='部门一';
3.2、生成一条create table 语句
select CONCAT('create table ', de, ' select no, name from A where de=''', de, ''';') as tab from A limit 1
concat : 拼接字符函数
效果:
3.3、生成所有create table 语句,去重 (通过group by去重)
select CONCAT('create table ', de, ' select no, name from A where de=''', de, ''';') as tab from A group by de
- 效果
3.4、继续优化,如果100个部门不得复制一百遍吗?能不能将tab的值拼接起来
group_concat 字段名 SEPARATOR 分隔符
生成sql
select group_concat(aa.tab SEPARATOR ' ')from(select CONCAT('create table ', de, ' select no, name from A where de=''', de, ''';') as tab from A group by de ) aa;
结果是:
create table 部门一 select no, name from A where de='部门一'; create table 部门二 select no, name from A where de='部门二'; create table 部门三 select no, name from A where de='部门三';
3.5、复制执行即可。
4、总结
- 本质上是利用mysql的select语句拼接SQL,替换手动拼接sql的麻烦和容易出错
- 然后利用mysql支持语句执行sql功能。例如其他需求,比如订正数据时候,可以利用select生update语句,然后执行,这也一个思路,当然配合excel使用
mysql一张表拆成多张表思路方案实现相关推荐
- oracle一个表拆成多个表,oracle拆分函数,将字符串拆分成多行多字段表数据
--创建OBJECT类型,包含三个字段 CREATE OR REPLACE TYPE OBJ_V_TABLE AS OBJECT ( ID VARCHAR2(50), NAME VARCHAR2(50 ...
- oracle一个表拆成多个表,oracle – 在oracle表中将多个以逗号分隔的值拆分为多行...
接受的答案使用条件DBMS_RANDOM.VALUE IS NOT NULL这是不合适的. 它只是防止循环,但是一个简单的问题会出现, 如何和何时dbms_random.VALUE可以为空? 从逻辑上 ...
- excel几个表合成一张_快速将多个excel表合并成一个excel表
应用场景:有很多张excel,而且excel表里面的结构基本一样,如何快速将这些excel合并在一个excel页面,便于后期分析和统计 技术实现:利用excel表的宏计算实现. 注意:金山的WPS没有 ...
- 快速将多个excel表合并成一个excel表
应用场景:有很多张excel,而且excel表里面的结构基本一样,如何快速将这些excel合并在一个excel页面,便于后期分析和统计 技术实现:利用excel表的宏计算实现. 注意:金山的WPS没有 ...
- 如何将多个Excel表合并成一个Excel表
如何将多个Excel表合并成一个Excel表 每天需要和Excel办公软件打交道俄小伙伴,他们的电脑桌面上总是布满密密麻麻的Excel表,这样看上去非常的凌乱,其实我们完全可以将其中类别相同的Exce ...
- 如何快速把多个excel表合并成一个excel表(不熟悉vba及公式的人)
对于不熟悉Excel公式,不熟悉vba的人,要如何按需要快速把多个excel表合并成一个excel表? 对于Excel的合并,很多需要通过vba变成,但对于不熟悉vba编程的人,如何合并呢?给大家推荐 ...
- excel合并多个工作表_简单快速多个Excel表合并成一个Excel表
在工作中经常遇到需要把多个电子表合成一个电子表的情况,比如回收的多份调查表格,多个班级成绩合成全校成绩等问题.用传统的方法复制.粘贴耗时费力,还容易出错. 这些表格的特点是每个表格结构一致,需要按一定 ...
- excel数据库设计表转换成sql建表语句
序号 字段英文 字段中文 主键 类型 长度 单位 空否 默认值 备注 1. ID 自增ID N 11 2. REC_CREATOR 记录创建责任者 C 10 3. REC_CREATE_TIME 记录 ...
- VBA学习——对“快速将多个excel表合并成一个excel表”进行说明及优化
修改了两个地方 1.原始表格有错误,打开会报错.优化1会自动忽略报错对表格进行合并. 2.表格格式包含不同种类的文件,如".xls"和".xlsx".优化2会将 ...
最新文章
- Ant Design Pro 登录流程以及路由权限设置
- 数据库架构优化的12种组合方式与风险解读
- Linux下ipconfig分析及C语言实现
- python opencv读取网络图片
- Blog_mini完整部署文档
- 【Linux】一步一步学Linux——w命令(227)
- 多项式除法,多项式取模
- C语言小程序:找出100以内素数
- 《通信原理》复习笔记10----第十章模拟信号的数字传输及相关例题(重点及难点)
- Windows界面UI自绘编程(上)之下部
- excel两列数据对比找不同_Excel“找不同”小妙招来啦,请查收
- 解决appium中Error: The port #8100 is occupied by an other process的问题
- C语言-投票选举问题
- [凯圣王]有氧运动无氧运动/三大供能系统/跑步会不会腿粗/健美爱好者为什么不做HIIT减脂/空腹有氧思路/思路不同身材不同
- LBT(CCA) in LAA/Multefire (二)
- 英语preciouscorals贵珊瑚PreciousCorals红珊瑚
- 【Kong】网关-rate-limiting限流
- 服务器脱机18个文档正在打印,打印机提示脱机打印的解决方案.docx
- MOOS程序解析记录(7)pMarinePID解析
- 多路视频数据实时采集系统设计与实现
热门文章
- 数仓实战|一文看懂数据中台接口数据采集
- 【微信小程序】vertical属性、文章列表
- Linux安装Ubuntu18.04/显卡驱动/CUDA11.4/cuDNN8.2
- python单选题库答案_Python单选题库
- python数据分析透视表,定制你的分析计算需求
- 双馈风机虚拟惯性控制参与系统一次调频的Matlab Simulink模型
- 东莞1号线广东医科大学站进入深基坑土方开挖
- HIPAA Program Reference Handbook
- 懂数据会营销的健身房会员管理软件
- 已备案域名能不能直接用于阿里云服务器?