SQL两个表数据对比

SQL两个表数据对比,第1张

select a.*,'相同数据' as note from 表A a left join 表B b

on a.name=b.name

where a.age=b.age

union all

select *,'不相同数据' as note from 表A c where c.name not in

(

select a.name from 表A a left join 表B b

on a.name=b.name

where a.age=b.age

) or c.age not in

(

select a.age from 表A a left join 表B b

on a.name=b.name

where a.age=b.age

)

union all

select *,'不相同数据' as note from 表B c where c.name not in

(

select a.name from 表A a left join 表B b

on a.name=b.name

where a.age=b.age

) or c.age not in

(

select a.age from 表A a left join 表B b

on a.name=b.name

where a.age=b.age

)

你好!

先获取不重复的ID,即x、y表的不重复并集,观察x、y表结构类似,通过union进行排重即可。

使用第一步获取的数据进行左链接x、y表的扩展表(第3步)。

分别对x、y表进行分组并合计,针对图片中y表中ID为A的记录出现多次,最后显示为ID为A的盘点数量为2,这样的数据进行处理,以方便最后显示。

通过(库存数-盘点数)得到比对字段值。

SELECT

t.ID,

IFNULL(t.`库存数量`, 0) `库存数量`,

IFNULL(t.`盘点数量`, 0) `盘点数量`,

(

IFNULL(t.`库存数量`, 0) - IFNULL(t.`盘点数量`, 0)

) `比对`

FROM

(

SELECT

a.ID ID,

p1.`库存数量`,

p2.`盘点数量`

FROM

(

SELECT

ID

FROM

x

UNION

SELECT

ID

FROM

y

) a

LEFT JOIN (

SELECT

ID,

sum(`库存数量`) `库存数量`

FROM

x

GROUP BY

ID

) p1 ON a.id = p1.id

LEFT JOIN (

SELECT

ID,

sum(`盘点数量`) `盘点数量`

FROM

y

GROUP BY

ID

) p2 ON a.id = p2.id

) t

ORDER BY

ID

希望对你有帮助!


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

原文地址:https://54852.com/sjk/9966010.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存