mysql如何实现两个表的数据差异查询

mysql如何实现两个表的数据差异查询,第1张

查询两张表数据不一致的记录,可以用求差集(非交集)的办法来解决。

SQL语言求"差集"的办法相对于求"交集"的办法要少很多,一般可用not exists(非存在子句)或 左(右)连接后所产生空字段值来筛选两表的差集。

下面举个例子供参考

选出a表中与b表中id不一致的记录

select a.* from a where not exists (select 1 from b where b.id=c.id)

说明:上述语句只比对id一个字段,我们可以根据需要比对多个字段。not exists在比对字段有可利用的索引时,其运行效率是非常高,但是如果没有索引的情况下运行在大数据表时,其运行效率极差,这时应避免使用它,这时我们可改用左(右)连接来求差集。

下面是用左连接来求差集的例子:

1

select a.* from a left join b on a.id=b.id where b.id is null

用左(右)连接来求差集,由于需要实施两表连接会导致笛卡尔效应其输出集的记录行可能会增多,若果不是一对一或一对多,我们应该将多对多的情况处理成多对一后才进行连接,否则输出的记录集可能不正确。

求差集的两种方法,有索引可利用时,not exists的效率要高于left join,反之left join效率更好。

推荐使用outer join

比如有2个表 table1和Table2

都有两个字段content

查询内容在table1但不在table2中的数据的语句是

select table1.*

from table1 left outer join table2

on table1.content=table2.content

where table2.content is null

反过来查询在table2不在table1中,则语句为

select table2.*

from table1 right outer join table2

on table1.content=table2.content

where table1.content is null


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10057974.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存