BI-SQL丨两表差异比较

BOSS:哎,白茶,我们最近新上了一个系统,后续有一些数据要进行源切换,这个能整么?
白茶:没问题,可以整!
BOSS:哦,对了,差点忘记告诉你了,新系统没有进行过数据校验,所以切换之前,需要你处理一下,这个能整不?
白茶:(¥#!&*%!)能!

数仓在运维过程中,难免会遇到数据源切换,或者是方案调整的情况。
要知道,对于数仓来说,数据的准确性是非常重要的,也是衡量数仓是否可用的标准之一。
那么当某些表数据源发生变动时,我们该如何快速进行数据差异比较呢?
面对这种情况,我们可以使用EXCEPT和INTERSECT来解决这一问题。

概念介绍

EXCEPT是用来比较两个表之间的数据差,返回的结果集为在第一个表中存在且在第二个表中不存在的数据;INTERSECT是用来获取两个表之间的数据交集,返回的结果集为两个表中相同的部分。

使用条件
1.被比较的两个表列数和列名顺序需要一致;
2.被比较的两个表数据类型可以不一致,但是需要兼容;
3.被比较的两个表中不能存在不可被比较的数据类型。

使用实例

案例数据:
利用如下SQL语句,在数仓中构建案例数据。

CREATE TABLE [dbo].[BaiCha1](
    [LB_Name] [nvarchar](20) NULL,
    [LB_Value] [nvarchar](255) NULL
)
GO
;


INSERT INTO
    [dbo].[BaiCha1]
VALUES
('A', '1')
GO
;


CREATE TABLE [dbo].[BaiCha2](
    [LB_Name] [nvarchar](20) NULL,
    [LB_Value] [nvarchar](255) NULL
)
GO
;


INSERT INTO
    [dbo].[BaiCha2]
VALUES
('A', '1'),
    ('B', '2')
GO
;


CREATE TABLE [dbo].[BaiCha3](
    [LB_Name] [nvarchar](20) NULL,
    [LB_Value] [nvarchar](255) NULL
)
GO
;


INSERT INTO
    [dbo].[BaiCha3]
VALUES
('A', '1'),
    ('B', '2')
GO
;

结果如下:

例子1:
利用EXCEPT比较3张表之间的差异。

SELECT
    *
FROM
    BaiCha2EXCEPT
SELECT
    *
FROM
    BaiCha1
GO
;


SELECT
    *
FROM
    BaiCha2EXCEPT
SELECT
    *
FROM
    BaiCha3
GO
;

结果如下:

例子2:
利用INTERSECT比较3张表之间的差异。

SELECT
    *
FROM
    BaiCha2
INTERSECT
SELECT
    *
FROM
    BaiCha1
GO
;


SELECT
    *
FROM
    BaiCha2
INTERSECT
SELECT
    *
FROM
    BaiCha3
GO
;

结果如下:

例子3:
在实际应用中,我们也可以换一种写法,直接输出结果计数,这种方法叫做减法归零。这里我们使用BaiCha1和BaiCha2进行举例。

SELECT  COUNT(*) AS T1_NOT_T2_Count
FROM    ( SELECT    *
          FROM      [dbo].[BaiCha1]
          EXCEPT
          SELECT    *
          FROM      [dbo].[BaiCha2]
        ) AS T;
 
SELECT  COUNT(*) AS T2_NOT_T1_Count
FROM    ( SELECT    *
          FROM      [dbo].[BaiCha2]
          EXCEPT
          SELECT    *
          FROM      [dbo].[BaiCha1]
        ) AS T;

结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fabric丨白茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值