微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

比较 3 个 SQL Server 表,根据某个属性匹配后将结果放在一个表中,不匹配时将结果放在另一个表中

如何解决比较 3 个 SQL Server 表,根据某个属性匹配后将结果放在一个表中,不匹配时将结果放在另一个表中

我有一个简单的需求,有 3 个 sql Server 表,如下所示:

  • 表一;列

      AID  Name  dob  Gender  PostCode
    
  • 表2;列

      BID  Name  dob  Gender  PostCode
    
  • 表3;列

      CID  Name  dob  Gender  PostCode
    

我希望基于姓名、出生日期、性别和邮政编码在所有表中加入(内部联接),如果记录匹配,我想将结果放在一个表中,其余记录我希望放在另一个表中用于进一步比较/处理。

这个查询的第一部分很简单:

SELECT AID,BID,CID,A.Name,A.dob,A.Gender,A.PostCode
FROM TAB_A
JOIN TAB_B B ON A.Name = B.Name 
             AND A.dob = B.dob 
             AND A.Gender = B.Gender 
             AND A.PostCode = B.PostCode
JOIN TAB_C C ON A.Name = C.Name 
             AND A.dob = C.dob 
             AND A.Gender = C.Gender 
             AND A.PostCode = C.PostCode

但不匹配的剩余记录的第二部分需要将它们放在单独的表中。

例如,如果所有 3 个表(A = 20,B=20 & C=10)中总共有 50 条记录,并且根据上述查询所有记录匹配的输出为 5,我希望存储单独表中有 95 条记录。

您的帮助/回答将不胜感激。

谢谢

解决方法

您可以使用 union all 组合表格。然后使用窗口函数按您关心的列计算匹配项。

返回匹配小于 3 的行:

select id,Name,DOB,Gender,PostCode
from (select id,PostCode,count(*) over (partition by Name,PostCode) as cnt
      from ((select AID as id,PostCode
             from a
            ) union all
            (select BID,PostCode
             from b
            ) union all
            (select CID,PostCode
             from c
            )
           ) abc
      ) abc
where cnt < 3;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。