在数据迁移中,我们经常需要比较两个表,以便在一个表中标识另一个表中没有相应记录的记录。

    例如,我们有一个新的数据库,其架构与旧数据库不同。我们的任务是将所有数据从旧数据库迁移到新数据库,并验证数据是否正确迁移。要检查数据,我们必须比较两个表,一个在新数据库中,一个在旧数据库中,并标识不匹配的记录。

    假设有两个表:t1t2。使用以下步骤比较两个表,并确定不匹配的记录,按着常用的思路就是,我们先查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使用技巧之比较两个表是否有不同的数据相关推荐

  1. 两个mysql表对比_mysql实用技巧之比较两个表是否有不同数据的方法分析

    本文实例讲述了mysql比较两个表是否有不同数据的方法.分享给大家供大家参考,具体如下: 在数据迁移中,我们经常需要比较两个表,以便在一个表中标识另一个表中没有相应记录的记录. 例如,我们有一个新的数 ...

  2. 在Excel表格中如何快速检查两张表的不一样的数据

    在Excel表格中如何快速检查两张表的不一样的数据 目录 在Excel表格中如何快速检查两张表的不一样的数据 1.全选第一张表格,找到"开始"选项卡中"条件格式" ...

  3. MySQL可以同时修改两个表吗_(10)MySQL触发器(同时操作两张表)

    什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 举个例子,比如你现在有两个表[用户表]和[日志 ...

  4. mysql高效获取两张表共同字段的交集数据

    问题: 例如下面两站表A,B.A表和B表分别有5-10w数据. A表结构如下: id bid name title publisher extra B表结构如下 id bid name title p ...

  5. (10)MySQL触发器(同时操作两张表)

    什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 举个例子,比如你现在有两个表[用户表]和[日志 ...

  6. SqlServer+mysql查询两张表的相同和不同数据

    sqlserver 在SQL SERVER 2000中只能用Exists来判断,到了SQL SERVER 2005以后可以采用EXCEPT和INTERSECT运算符比较两张表的数据. INTERSEC ...

  7. mysql用外键链接两个表_可能做一个MySQL外键的两个可能的表之一?

    你所描述的是多态关联.也就是说,"外键"列包含必须存在于一组目标表之一中的id值.通常,目标表以某种方式相关,例如一些常见的数据超类的实例.您还需要外键列旁边的另一列,以便在每行上 ...

  8. mysql update后可以跟两个表_update后可接两张表吗,

    展开全部 一条update只能修改一张表里的字段,但是可以关联多张表去修改.不知道你用的62616964757a686964616fe58685e5aeb931333365643662是什么数据库. ...

  9. 《数据库技巧》数据库两个表求笛卡尔积(阶乘)

    最近遇到了一个需求:用户在客户端页面上进行数据录入,下拉列表的选择,然后用户对页面数据进行提交.后台要根据客户端传来的数据进行分析,并且生成一串数字,将该数字串进行保存. 介绍之前,我们要了解本文的一 ...

最新文章

  1. redis setnx 分布式锁_手写Redis分布式锁
  2. 网站建设技术――智能建站系统
  3. php如何对数据类型检测 有哪些方法,php检测数据类型的几种方法汇总
  4. java 注解 属性 类型_收藏!你一定要知道的Java8中的注解
  5. nw.js FrameLess Window下的窗口拖拽与窗口大小控制
  6. Java中反射获取成员变量、构造方法、成员方法及类名
  7. 培养“资源意识”,有助于职场晋升
  8. LeetCode 386. Lexicographical Numbers
  9. 微信AES-128-CBC加密解密
  10. fromPromise
  11. Windows内核的基本概念
  12. css中背景颜色的代码,css背景代码是什么,css怎么控制背景颜色
  13. sqlserver用sql语句备份数据库
  14. 在机器学习领域,怎样写好一篇论文
  15. php货币2019年12月31日汇率,[外汇]2019年12月31日人民币汇率中间价新公告 今日美元兑人民币行情查询 - 南方财富网...
  16. 2022年电工(初级)操作证考试题库及模拟考试
  17. DB2DIAG 命令学习
  18. vue级联选择框(Cascader)动态渲染数据
  19. 1+X 云计算平台运维与开发认证(初级)B
  20. 喜大普奔:PC版有道词典有深色模式了

热门文章

  1. Kubernetes Meetup 北京站
  2. 红外线额温枪与红外线温度传感器的原理分析
  3. iOS开发者们如何获取设备型号
  4. 随机种子不随机(random_state)
  5. QtVtk-020-GraphItem
  6. 解决报错:java: You aren‘t using a compiler supported by lombok, so lombok will not work and has been dis
  7. 【单端S参数与差分S参数转化】
  8. 套接字缓存之skb_put、skb_push、skb_pull、skb_reserve
  9. Leetcode69-Sqrt(x)
  10. AOC 27G2 评测