MySQL比较两张表数据相同、不同结果记录

两张表:水果设备表sb_fruit、系统设备表xt_fruit,比较两张表中相同、不同的数据结果。

自己开始尝试写的方法:

(1)设备与系统共有数据:

select sb.id,sb.name_idnumber,xt.id,xt.name_idnumber 
from sb_fruit sb,xt_fruit xt 
where sb.name_idnumber = xt.name_idnumber; 

(2)设备多出数据:

select sb.id,sb.name_idnumber 
from sb_fruit sb  
where sb.id not in 
(
select sb.id
from sb_fruit sb,xt_fruit xt 
where sb.name_idnumber = xt.name_idnumber 
);

(3)系统多出数据:

select xt.id,xt.name_idnumber 
from xt_fruit xt 
where xt.id not in 
(
select xt.id 
from sb_fruit sb,xt_fruit xt 
where sb.name_idnumber = xt.name_idnumber 
);

后学到另一种方法,比较两张表数据的不匹配记录、匹配记录。

参考网址:【MySQL比较两个表不同的数据 - MySQL教程 https://www.yiibai.com/mysql/compare-two-tables-to-find-unmatched-records-mysql.html


步骤:
    (1)首先,使用UNION语句来组合两个表中的行; 仅包需要比较的列。返回的结果集用于比较。
    (2)第二步,根据需要比较的主键和列分组记录。如果需要比较的列中的值相同,则COUNT(*)返回2,否则COUNT(*)返回1。

    

两张表中各自不同的数据:

(1)此为二者多出结果的混合数据:
select id,name_idnumber 
from 
(
select CONCAT('sb_',sb.id) id,sb.name_idnumber 
from sb_fruit sb 
UNION ALL 
select CONCAT('xt_',xt.id) id,xt.name_idnumber 
from xt_fruit xt 
) t 
GROUP BY name_idnumber 
HAVING count(*) = 1;      


(2)此为单看设备多出结果:
select id,name_idnumber 
from 
(
select CONCAT('sb_',sb.id) id,sb.name_idnumber 
from sb_fruit sb 
UNION ALL 
select CONCAT('xt_',xt.id) id,xt.name_idnumber 
from xt_fruit xt 
) t 
GROUP BY name_idnumber 
HAVING count(*) = 1 
and id like '%sb_%';        


(3)此为单看系统多出结果:
select id,name_idnumber 
from 
(
select CONCAT('sb_',sb.id) id,sb.name_idnumber 
from sb_fruit sb 
UNION ALL 
select CONCAT('xt_',xt.id) id,xt.name_idnumber 
from xt_fruit xt 
) t 
GROUP BY name_idnumber 
HAVING count(*) = 1     
and id like '%xt_%';        

查看两张表的相同数据:

select name_idnumber 
from 
(
select sb.name_idnumber 
from sb_fruit sb 
UNION ALL 
select xt.name_idnumber 
from xt_fruit xt 
) t 
GROUP BY name_idnumber 
HAVING count(*) = 2;

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值