[原]用SQL比较两张结构完全相同的表数据
前几天面试遇到一个比较有意思的问题,就是有两张结构完全相同的表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比较两张结构完全相同的表数据的更多相关文章
- sql server编写通用脚本自动统计各表数据量心得
工作过程中,如果一个数据库的表比较多,手工编写统计脚本就会比较繁琐,于是摸索出自动生成各表统计数据量脚本的通用方法,直接上代码: /* 脚本来源:https://www.cnblogs.com/zha ...
- SQL SERVER大话存储结构(3)_数据行的行结构
一行数据是如何来存储的呢? 变长列与定长列,NULL与NOT NULL,实际是如何整理存放到 8k的数据页上呢? 对表格进行增减列,修改长度,添加默认值等DDL SQL ...
- Sql Server 导入还有一个数据库中的表数据
在涉及到SQL Server编程或是管理时一定会用到数据的导入与导出, 导入导出的方法有多种,此处以SQL Server导入表数据为例.阐述一下: 1.打开SQL Server Management ...
- SQL 两张结构一样的表合并查询 .
select * from table1 union all select * from table2 union all 是所有的都显示出来: select * from table1 union ...
- SQL 将两个结构相同的表合并到成一个表
select * into 新表名 from (select * from T1 union all select * from T2) 这个语句可以实现将合并的数据追加到一个新表中. 不合并重复数据 ...
- 【mybatis】mybatis一条sql更新两张数据表,mybatis关联更新多张数据表
示例sql: <update id="receipt" parameterType="com.pisen.cloud.luna.ms.security.code.b ...
- SQL SERVER大话存储结构(1)_数据页类型及页面指令分析
如果转载,请注明博文来源: www.cnblogs.com/xinysu/ ,版权归 博客园 苏家小萝卜 所有.望各位支持! SQLServer的数据页大 ...
- SQLSEVER 不同服务器下两个结构相似的表实现数据同步(触发器)
1.建立链接服务器 在ServerA 中创建指向ServerB的链接服务器,并做好账号映射.addlinkedserver存储过程创建一个链接服务器,参数详情参见官方文档. 第1个参数LNK_Serv ...
- SQL SERVER大话存储结构(4)_复合索引与包含索引
索引这块从存储结构来分,有2大类,聚集索引和非聚集索引,而非聚集索引在堆表或者在聚集索引表都会对其 键值有所影响,这块可以详细查看本系列第二篇文章:SQL SERVER大话存储结构 ...
随机推荐
- DockerToolbox安装docker - Windows 10
Wiindows安装docker 在转换成linux模式的时候不能使用,只能退而求其次安装Docker ToolBox在windows10中使用docker. 一.前言 由于本机使用的是win10家庭 ...
- android底部导航栏实现
第一种用radiobutton实现 https://wizardforcel.gitbooks.io/w3school-android/content/75.html 布局文件,使用radiogrou ...
- html()和append()
html()方法会替换原有内容,append() 方法在被选元素的结尾插入指定内容.prepend() 方法在被选元素的开头插入指定内容 appendChild() 方法向节点添加最后一个子节点.pr ...
- 接入HikariCP遇到问题
老Tomcat项目在接入HikariCP时遇到报错: Caused by: java.lang.AbstractMethodError: com.mysql.jdbc.Connection.isVal ...
- Go断点续传
1. seek package main import ( "os" "log" "fmt" "io" ) func m ...
- SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8_general_ci,IMPLICIT) and (gb2312_chinese_ci,COERCIBLE) for operation '='
在操作MySQL数据库时,报“ error code [1267]; Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and (utf8_gen ...
- org.apache.catalina.connector.ClientAbortException: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
org.apache.catalina.connector.ClientAbortException: java.io.IOException: 你的主机中的软件中止了一个已建立的连接. at org ...
- Sql性能优化梳理
前言 先简单梳理下Mysql的基本概念,然后分创建时和查询时这两个阶段的优化展开. 1.0 基本概念简述 1.1 逻辑架构 第一层:客户端通过连接服务,将要执行的sql指令传输过来 第二层:服务器解析 ...
- python换源
pip源的更新 引用自:PyPI使用国内源 # coding: utf-8 import platform import os os_type = platform.system() if " ...
- tkinter学习(4)frame、pack、canvas学习
1.frame和pack学习 1.1 代码: import tkinter as tk window = tk.Tk() window.title('my window') window.geomet ...