mysql使用技巧之比较两个表是否有不同的数据
在数据迁移中,我们经常需要比较两个表,以便在一个表中标识另一个表中没有相应记录的记录。
例如,我们有一个新的数据库,其架构与旧数据库不同。我们的任务是将所有数据从旧数据库迁移到新数据库,并验证数据是否正确迁移。要检查数据,我们必须比较两个表,一个在新数据库中,一个在旧数据库中,并标识不匹配的记录。
假设有两个表:t1
和t2
。使用以下步骤比较两个表,并确定不匹配的记录,按着常用的思路就是,我们先查t1
,完事呢,拿着数据结果集来循环,一条一条的去另一张表中查询,能查到数据,就是正确的,查询不到,就是数据有丢失的现象。
如果真的这样的话,那你可就真的是啊,too young too simple了。这次呢,咱们来介绍一个比较简单的数据对比方案,那就是使用union all关联两张表,完事使用临时表或者说派生表的方式来进行数据对比。先来看下union all的sql实例吧:
SELECT t1.pk, t1.c1
FROM t1
UNION ALL
SELECT t2.pk, t2.c1
FROM t2
完事咱们就先来建立两张表,再插入一些数据,完事就可以进行测试了,先来看建表:
CREATE TABLE t1(id int auto_increment primary key,title varchar(255)
);CREATE TABLE t2(id int auto_increment primary key,title varchar(255),note varchar(255)
);
完事先在t1
中插入数据:
INSERT INTO t1(title)
VALUES('row 1'),('row 2'),('row 3');
再来在t2
中插入数据:
INSERT INTO t2(title)
VALUES('row 1'),('row 2'),('row 3');
好,咱们接下来就是要使用派生表的方式来对比数据了哦:
SELECT id,title
FROM (SELECT id, title FROM t1UNION ALLSELECT id,title FROM t2
) tbl
GROUP BY id, title
HAVING count(*) = 1
ORDER BY id;
运行之后当然是没有任何返回数据的,因为它们是没有什么差别的。不着急哈,咱们再来在t2
表中插入一行数据:
INSERT INTO t2(title,note)
VALUES('new row 4','new');
完事我们再次比较两个表中的title
列的值,因为新行是不匹配的行将会返回,我们来看下结果:
mysql> SELECT id,title
FROM (SELECT id, title FROM t1UNION ALLSELECT id,title FROM t2
) tbl
GROUP BY id, title
HAVING count(*) = 1
ORDER BY id;
+----+-----------+
| id | title |
+----+-----------+
| 4 | new row 4 |
+----+-----------+
1 row in set
好啦,这次小技巧就到这里了哦。如果感觉不错的话,请多多点赞支持哦。。。
mysql使用技巧之比较两个表是否有不同的数据相关推荐
- 两个mysql表对比_mysql实用技巧之比较两个表是否有不同数据的方法分析
本文实例讲述了mysql比较两个表是否有不同数据的方法.分享给大家供大家参考,具体如下: 在数据迁移中,我们经常需要比较两个表,以便在一个表中标识另一个表中没有相应记录的记录. 例如,我们有一个新的数 ...
- 在Excel表格中如何快速检查两张表的不一样的数据
在Excel表格中如何快速检查两张表的不一样的数据 目录 在Excel表格中如何快速检查两张表的不一样的数据 1.全选第一张表格,找到"开始"选项卡中"条件格式" ...
- MySQL可以同时修改两个表吗_(10)MySQL触发器(同时操作两张表)
什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 举个例子,比如你现在有两个表[用户表]和[日志 ...
- mysql高效获取两张表共同字段的交集数据
问题: 例如下面两站表A,B.A表和B表分别有5-10w数据. A表结构如下: id bid name title publisher extra B表结构如下 id bid name title p ...
- (10)MySQL触发器(同时操作两张表)
什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 举个例子,比如你现在有两个表[用户表]和[日志 ...
- SqlServer+mysql查询两张表的相同和不同数据
sqlserver 在SQL SERVER 2000中只能用Exists来判断,到了SQL SERVER 2005以后可以采用EXCEPT和INTERSECT运算符比较两张表的数据. INTERSEC ...
- mysql用外键链接两个表_可能做一个MySQL外键的两个可能的表之一?
你所描述的是多态关联.也就是说,"外键"列包含必须存在于一组目标表之一中的id值.通常,目标表以某种方式相关,例如一些常见的数据超类的实例.您还需要外键列旁边的另一列,以便在每行上 ...
- mysql update后可以跟两个表_update后可接两张表吗,
展开全部 一条update只能修改一张表里的字段,但是可以关联多张表去修改.不知道你用的62616964757a686964616fe58685e5aeb931333365643662是什么数据库. ...
- 《数据库技巧》数据库两个表求笛卡尔积(阶乘)
最近遇到了一个需求:用户在客户端页面上进行数据录入,下拉列表的选择,然后用户对页面数据进行提交.后台要根据客户端传来的数据进行分析,并且生成一串数字,将该数字串进行保存. 介绍之前,我们要了解本文的一 ...
最新文章
- redis setnx 分布式锁_手写Redis分布式锁
- 网站建设技术――智能建站系统
- php如何对数据类型检测 有哪些方法,php检测数据类型的几种方法汇总
- java 注解 属性 类型_收藏!你一定要知道的Java8中的注解
- nw.js FrameLess Window下的窗口拖拽与窗口大小控制
- Java中反射获取成员变量、构造方法、成员方法及类名
- 培养“资源意识”,有助于职场晋升
- LeetCode 386. Lexicographical Numbers
- 微信AES-128-CBC加密解密
- fromPromise
- Windows内核的基本概念
- css中背景颜色的代码,css背景代码是什么,css怎么控制背景颜色
- sqlserver用sql语句备份数据库
- 在机器学习领域,怎样写好一篇论文
- php货币2019年12月31日汇率,[外汇]2019年12月31日人民币汇率中间价新公告 今日美元兑人民币行情查询 - 南方财富网...
- 2022年电工(初级)操作证考试题库及模拟考试
- DB2DIAG 命令学习
- vue级联选择框(Cascader)动态渲染数据
- 1+X 云计算平台运维与开发认证(初级)B
- 喜大普奔:PC版有道词典有深色模式了
热门文章
- Kubernetes Meetup 北京站
- 红外线额温枪与红外线温度传感器的原理分析
- iOS开发者们如何获取设备型号
- 随机种子不随机(random_state)
- QtVtk-020-GraphItem
- 解决报错:java: You aren‘t using a compiler supported by lombok, so lombok will not work and has been dis
- 【单端S参数与差分S参数转化】
- 套接字缓存之skb_put、skb_push、skb_pull、skb_reserve
- Leetcode69-Sqrt(x)
- AOC 27G2 评测