前几天面试遇到一个比较有意思的问题,就是有两张结构完全相同的表A和B,但是这两张表属于不同的业务流程,经过一段时间后发现两张表的数据不能完全匹配,有可能A比B多,也可能B比A多,或者两种可能同时存在,需要写SQL找出两张表的差异。当时我就随便写了一个left join的方式通过on不等于来找出差异,今天测试了一下是不行的。下面是重新写得可行方法:

CREATE TABLE `test_a` (
`trade_id` varchar(20) NOT NULL,
`user_id` varchar(20) DEFAULT NULL,
`amount` double DEFAULT NULL,
PRIMARY KEY (`trade_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `test_b` (
`trade_id` varchar(20) NOT NULL,
`user_id` varchar(20) DEFAULT NULL,
`amount` double DEFAULT NULL,
PRIMARY KEY (`trade_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `test_a` (`trade_id`,`user_id`,`amount`) VALUES ('t0001','u0001',100);
INSERT INTO `test_a` (`trade_id`,`user_id`,`amount`) VALUES ('t0002','u0005',29.8);
INSERT INTO `test_a` (`trade_id`,`user_id`,`amount`) VALUES ('t0003','u0002',3050);
INSERT INTO `test_a` (`trade_id`,`user_id`,`amount`) VALUES ('t0004','u0003',128.4);
INSERT INTO `test_a` (`trade_id`,`user_id`,`amount`) VALUES ('t0005','u0004',33.7); INSERT INTO `test_b` (`trade_id`,`user_id`,`amount`) VALUES ('t0001','u0001',100);
INSERT INTO `test_b` (`trade_id`,`user_id`,`amount`) VALUES ('t0002','u0005',29.8);
INSERT INTO `test_b` (`trade_id`,`user_id`,`amount`) VALUES ('t0003','u0002',3050);
INSERT INTO `test_b` (`trade_id`,`user_id`,`amount`) VALUES ('t0004','u0003',128.4);
INSERT INTO `test_b` (`trade_id`,`user_id`,`amount`) VALUES ('t0005','u0004',33.7);
INSERT INTO `test_b` (`trade_id`,`user_id`,`amount`) VALUES ('t0006','u0006',19.6);
select * from test_a where concat(concat(trade_id,user_id),amount) not in(
select concat(concat(a.trade_id,a.user_id),a.amount) from test_a as a left join test_b as b on a.trade_id=b.trade_id)
union
select * from test_b where concat(concat(trade_id,user_id),amount) not in(
select concat(concat(a.trade_id,a.user_id),a.amount) from test_a as a left join test_b as b on a.trade_id=b.trade_id)

思路:先将两张表相同的数据找出来,然后分别用表A和表B和找出来相同数据作对比得出差异,最后把差异数据union,可能我这不是最好的方法,谁有更好的方法可以告诉我。

[原]用SQL比较两张结构完全相同的表数据的更多相关文章

  1. sql server编写通用脚本自动统计各表数据量心得

    工作过程中,如果一个数据库的表比较多,手工编写统计脚本就会比较繁琐,于是摸索出自动生成各表统计数据量脚本的通用方法,直接上代码: /* 脚本来源:https://www.cnblogs.com/zha ...

  2. SQL SERVER大话存储结构(3)_数据行的行结构

            一行数据是如何来存储的呢?     变长列与定长列,NULL与NOT NULL,实际是如何整理存放到 8k的数据页上呢?     对表格进行增减列,修改长度,添加默认值等DDL SQL ...

  3. Sql Server 导入还有一个数据库中的表数据

    在涉及到SQL Server编程或是管理时一定会用到数据的导入与导出, 导入导出的方法有多种,此处以SQL Server导入表数据为例.阐述一下: 1.打开SQL Server Management ...

  4. SQL 两张结构一样的表合并查询 .

    select * from table1 union all select * from table2 union all 是所有的都显示出来: select * from table1 union ...

  5. SQL 将两个结构相同的表合并到成一个表

    select * into 新表名 from (select * from T1 union all select * from T2) 这个语句可以实现将合并的数据追加到一个新表中. 不合并重复数据 ...

  6. 【mybatis】mybatis一条sql更新两张数据表,mybatis关联更新多张数据表

    示例sql: <update id="receipt" parameterType="com.pisen.cloud.luna.ms.security.code.b ...

  7. SQL SERVER大话存储结构(1)_数据页类型及页面指令分析

                如果转载,请注明博文来源: www.cnblogs.com/xinysu/   ,版权归 博客园 苏家小萝卜 所有.望各位支持!          SQLServer的数据页大 ...

  8. SQLSEVER 不同服务器下两个结构相似的表实现数据同步(触发器)

    1.建立链接服务器 在ServerA 中创建指向ServerB的链接服务器,并做好账号映射.addlinkedserver存储过程创建一个链接服务器,参数详情参见官方文档. 第1个参数LNK_Serv ...

  9. SQL SERVER大话存储结构(4)_复合索引与包含索引

              索引这块从存储结构来分,有2大类,聚集索引和非聚集索引,而非聚集索引在堆表或者在聚集索引表都会对其 键值有所影响,这块可以详细查看本系列第二篇文章:SQL SERVER大话存储结构 ...

随机推荐

  1. 百炼OJ - 1001 - Exponentiation

    题目链接 哇一遍AC的感觉也太爽了吧:) #include <stdio.h> #include <string.h> int times=0; char *myCalc(ch ...

  2. Java学习笔记(八)面向对象---抽象类

    当多个类中出现相同功能,但是功能主体不同时,我们可以向上抽取,只抽取功能定义,而不抽取功能主体. 抽象类的特点 抽象方法一定在抽象类中. 抽象方法和抽象类都必须被abstract关键字修饰. 抽象类不 ...

  3. Redis07——Redis五大数据类型 set

    set Redis中set可以自动排重(不会出现重复数据),提供了判断某个成员是否在一个set集合内的重要接口(list没有此功能) 无序集合,底层是一个value为null的hash表,添加.删除. ...

  4. sqli-libs(42-45(post型)关)

    Less_42 查看源代码,可以看到password没有经过mysqli_real_escape_string()函数进行处理,所以这个时候我们在这个位置进行构造 使用admin 111111进行登录 ...

  5. 吴裕雄 python 机器学习——局部线性嵌入LLE降维模型

    # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from sklearn import datas ...

  6. RPA_播放语音

    验证码识别 from rpa.captcha.captcha import Captcha c = Captcha() log.info(tmp_file_path) captcha_result = ...

  7. HGsoft-downloader

    [NEW]HGsoft-downloader上线了! 给你提供一个简洁无广告的电脑软件下载平台,换个角度下载电脑软件. 网站地址:Go

  8. Kali部署DVWA和OWASPBWA

    自己的备忘录,这里记录Kali部署DVWA和OWASPBWA,其中遇到的问题会在下一篇文章记录 DVWA(Damn Vulnerable Web App)是一个基于PHP/MySql搭建的Web应用程 ...

  9. CRPR/CPPR

    S CRPR  clock reconvergence pessimism removal C CPPR  clock path pessimism removal 剔除公共clock path上的悲 ...

  10. 再有人问你HashMap,把这篇文章甩给他!

    声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java==集合中的精髓==了,如果你觉得自己对 ...