求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
要资料
 
 

mysql教程
MySQL快速学习入门
MySQL是什么
MySQL安装
MySQL示例数据库
MySQL导入示例数据库
MySQL基础教程
MySQL查询数据
MySQL WHERE语句
MySQL插入数据
MySQL更新表数据
MySQL删除表数据
MySQL创建与删除数据库
MySQL创建表
MySQL修改表结构
MySQL重命名表
MySQL数据类型
高级部分
MySQL技巧
MySQL存储过程
MySQL视图
MySQL触发器
MySQL管理
MySQL全文搜索
MySQL函数
应用程序连接
MySQL+Node.js连接和操作
Python+MySQL连接和操作
 
 

MySQL比较两个表不同的数据
561 次浏览
7次  

在本教程中,您将学习如何比较两个表以找到不匹配的记录。

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

例如,我们有一个新的数据库,其架构与旧数据库不同。我们的任务是将所有数据从旧数据库迁移到新数据库,并验证数据是否正确迁移。

要检查数据,我们必须比较两个表,一个在新数据库中,一个在旧数据库中,并标识不匹配的记录。

假设有两个表:t1和t2。使用以下步骤比较两个表,并确定不匹配的记录:

首先,使用UNION语句来组合两个表中的行; 仅包含需要比较的列。返回的结果集用于比较。

SELECT t1.pk, t1.c1
FROM t1
UNION ALL
SELECT t2.pk, t2.c1
FROM t2

第二步,根据需要比较的主键和列分组记录。如果需要比较的列中的值相同,则COUNT(*)返回2,否则COUNT(*)返回1。

请参阅以下查询:

SELECT pk, c1
FROM
(
SELECT t1.pk, t1.c1
FROM t1
UNION ALL
SELECT t2.pk, t2.c1
FROM t2
) t
GROUP BY pk, c1
HAVING COUNT(*) = 1
ORDER BY pk

如果比较中涉及的列中的值相同,则不返回任何行。

MySQL比较两个表的例子

我们来看一个模拟上述步骤的例子。

首先,创建具有相似结构的2个表:

USE testdb;
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和t2表中插入一些数据:

INSERT INTO t1(title)
VALUES('row 1'),('row 2'),('row 3');

INSERT INTO t2(title,note)
SELECT title, 'data migration'
FROM t1;

第三,比较两个表的id和title列的值:

SELECT id,title
FROM (
SELECT id, title FROM t1
UNION ALL
SELECT 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');

没有行返回,因为没有不匹配的记录。

第四步,在t2表中插入一行:…

INSERT INTO t2(title,note)
VALUES('new row 4','new');

第五步,执行查询以再次比较两个表中的title列的值。新行是不匹配的行将会返回。

mysql> SELECT id,title
FROM (
SELECT id, title FROM t1
UNION ALL
SELECT 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

在本教程中,您已经学习了如何根据特定列比较两个表以找到不匹配的记录。


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



561 次浏览
7次
 捐助