求问:mysql如何查询两个字段数不同的表中数据不一致的记录?

RT,大概需求如下,例:a表有12个字段,b表有10个字段,b表中的字段都是a表中所有的,两个表中有一个id字段用来进行查询。这两个表中的数据有可能会有差异,现要找出所有... RT,大概需求如下,例:
a表有12个字段,b表有10个字段,b表中的字段都是a表中所有的,两个表中有一个id字段用来进行查询。这两个表中的数据有可能会有差异,现要找出所有两个表中相同字段数据不同的记录,求教怎么写sql?
ps:项目使用tp5框架
展开
 我来答
tjrmgs
2018-06-23 · TA获得超过5765个赞
知道大有可为答主
回答量:2161
采纳率:94%
帮助的人:1042万
展开全部

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

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在比对字段有可利用的索引时,其运行效率是非常高,但是如果没有索引的情况下运行在大数据表时,其运行效率极差,这时应避免使用它,这时我们可改用左(右)连接来求差集。

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

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

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

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

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式