mysql怎么创建外表_MYSQL数据去重与外表填充
经常要对数据库中的数据进行去重,有时还需要使用外部表填冲数据,本文档记录数据去重与外表填充数据。
date:2016/8/17
author:wangxl
1 需求
对user_info1表去重,并添加age项。
2 表数据
user_info1:
+----+----------+------+------+
| id | name | sex | age |
+----+----------+------+------+
| 1 | xiaolong | 1 | NULL |
| 2 | xiaoyun | 1 | NULL |
| 3 | xiaoqin | 2 | NULL |
| 4 | xiaolong | 1 | NULL |
| 5 | xiaodong | 1 | NULL |
| 6 | xiaokai | 1 | NULL |
| 7 | xiaohong | 2 | NULL |
| 8 | xiaolong | 1 | NULL |
| 9 | xiaohong | 2 | NULL |
| 10 | xiaofen | 2 | NULL |
+----+----------+------+------+
user_info2:
+----------+------+
| name | age |
+----------+------+
| xiaolong | 26 |
| xiaoyun | 28 |
| xiaoqin | 27 |
| xiaodong | 27 |
| xiaokai | 27 |
| xiaohong | 24 |
| xiaofen | 22 |
+----------+------+
3 实战
3.1 去重
(1) 找出有重复字段
select * from user_info1 where name in (select name from user_info1 group by name having count(name) > 1);
(2) 找出要删除的记录,重复记录是根据单个字段(name)来判断,只留有id最小的记录
select * from user_info1 where name in (select name from user_info1 group by name having count(name) > 1) and id not in (select min(id) from user_info1 group by name having count(name) > 1);
(3) 删除表中多余的重复记录
delete from user_info1 where name in (select name from user_info1 group by name having count(name) > 1) and id not in (select min(id) from user_info1 group by name having count(name) > 1);
报错:ERROR 1093 (HY000): You can't specify target table 'user_info1' for update in FROM clause
更换思路:找出每组中非最小id并删除,如下:
(4) 找出每组最小id
select min(id) from user_info1 group by name
(5) 找出每组非最小id
select * from user_info1 where id not in (select min(id) from user_info1 group by name);
(6) 删除每组中非最小id所在行
delete from user_info1 where id not in (select id from select min(id) from user_info1 group by name);
ERROR 1093 (HY000): You can't specify target table 'user_info1' for update in FROM clause
更正:
delete from user_info1 where id not in (select minid from (select min(id) as minid from user_info1 group by name) a);、
结果展示:
+----+----------+------+------+
| id | name | sex | age |
+----+----------+------+------+
| 1 | xiaolong | 1 | NULL |
| 2 | xiaoyun | 1 | NULL |
| 3 | xiaoqin | 2 | NULL |
| 5 | xiaodong | 1 | NULL |
| 6 | xiaokai | 1 | NULL |
| 7 | xiaohong | 2 | NULL |
| 10 | xiaofen | 2 | NULL |
+----+----------+------+------+
对于没有primary key的话,怎么去重呢?
(7) 创建表test
(8) insert into test select distinct(name),sex,age from user_info1 group by name;
暂时没想出一句话解决方案.
3.2 外表插入
update user_info1 t set age=(select age from user_info2 where name=t.name);
结果如下:
+----+----------+------+------+
| id | name | sex | age |
+----+----------+------+------+
| 1 | xiaolong | 1 | 26 |
| 2 | xiaoyun | 1 | 28 |
| 3 | xiaoqin | 2 | 27 |
| 5 | xiaodong | 1 | 27 |
| 6 | xiaokai | 1 | 27 |
| 7 | xiaohong | 2 | 24 |
| 10 | xiaofen | 2 | 22 |
+----+----------+------+------+
mysql怎么创建外表_MYSQL数据去重与外表填充相关推荐
- c mysql如何获取照片_MYSQL数据库存取图片等文件(C语言)
直接把文件放入数据库中比较适合小文件,方便管理,比如头像图片和声音,如果是较大型的文件建议不要直接存进数据库,而是放在服务器,把文件索引放在数据库. MYSQL 中有个数据对象是 BLOB,即 Bin ...
- mysql批量创建数据库 导数据
由于近来需要从其它机器拉一堆数据到一台机器上做数据分析,由于涉及到数据库比较,数据也不大不小的,要手工一个一倒腾真是累的半死,于是弄了个脚本 实现功能,根据指定文件下的数据库文件命令格式, str=1 ...
- mysql 无法创建视图_mysql无法创建视图怎么办
mysql无法创建视图的解决办法: 基本语法 可以使用 CREATE VIEW 语句来创建视图. 语法格式如下: CREATE VIEW AS 语法说明如下. :指定视图的名称.该名称在数据库中必须是 ...
- MySQL:创建数据库,数据表,主键和外键
目录 前言: 安装MySQL: 打开MySQL: 创建数据库: 查看已建数据库: 查看数据库引擎: 创建数据表: 主键约束: 单字段主键: 多字段联合主键: 外键约束: 前言: MySQL数据库安装了 ...
- mysql怎样创建索引_mysql如何创建索引?
mysql创建索引的方法:1.使用CREATE TABLE语句配合INDEX或UNIQUE关键字在创建表的时候直接创建索引:2.使用ALTER TABLE语句来直接创建索引:3.使用CREATE IN ...
- mysql数据去重_mysql 数据去重
数据库版本mysql5.5.10 操作工具navicate for mysql 插入数据重复了 用mysql语句去重 -- 查询数量是否大于1 大于1 表示有重复数据 SELECT cou ...
- mysql去重查询数量_mysql 数据去重
数据库版本mysql5.5.10 操作工具navicate for mysql 插入数据重复了 用mysql语句去重 -- 查询数量是否大于1 大于1 表示有重复数据 SELECT cou ...
- mysql count if 去重_MYSQL数据去重
我们用的数据库是mysql,偶尔会因为程序处理上的方便或者sql未优化而增加了一些重复数据,最后需要对这些重复的数据进行删除 对于数据量不大的时候我一般用not in的方式来处理,或者删全表,导出不重 ...
- mysql快捷创建数据库_mysql数据库快速入门(1)
1.数据库操作 1.1.连接mysql服务器 mysql -u root( 用户名 ) -p 1.2.退出mysql命令提示窗 exit 1.3.查看版本 SELECT VERSION(); 1.4. ...
- mysql数据驱动的作用_MySQL数据优化
很多企业,可能每天应对的数据量达百万,千万,甚至上亿的访问量,这样的量已经超过普通配置的mysql所承受的量,所以为了应对日益增长的访问量,我们需要对mysql做出相应的对策,进一步优化mysql以达 ...
最新文章
- 伊利诺伊大学厄巴纳-香槟分校
- 5年後、10年後の自分のイメージ
- 将格式化的日期字符串转换为Unix时间戳(php)
- 如何解决failed to push some refs to git
- .bash_profile和.bashrc的区别(如何设置生效)
- PHP获取用户地址方法
- java 去掉 t_关于Java:在LocalDateTime中不能删除“ T”
- mac地址漂移flapping的前因后果
- lua 和 c交互详解(一)
- mybatis 自动生成integer_通过mybatis-generator-core工具自动关联表生成对应model、mappers及dao层代码类完整教程...
- UIView方法,属性的集合
- 描述个人品质常用英语单词一览 常用赞誉之辞语
- Python IDE: 10个最好用的python集成开发环境(IDE)
- 移动脱机 Outlook 数据文件 (.ost)
- ansys中模态扩展是什么意思_ansys模态分析步骤
- springboot+爱心捐赠小程序 毕业设计-附源码211711
- mysql实现跨服务器查询数据
- 群晖Docker百度网盘套件一直灰界面
- mysql8远程连接报错_远程连接MYSQL8.0服务器问题
- Android Automotive车载嵌入式系统