首页 > 解决方案 > 如果没有记录 ID,则在一个表中查找不在另一个表中的记录?

问题描述

我正在使用 SQL Server,我有两个表 TableMaster 和 TableValidator。他们都共享 5 列但没有 ID。我需要在 TableValidator 中找到所有不在 TableMaster 上的记录,以便最终将它们插入 TableMaster。如果所有这 5 列的值在两者上都相同,那么这就是相同的记录。

例如:

表大师

 JobCode | Location | Code1 | Code2 | Code3 | Other column...
>100333    USA        A112    TR      0057
 100987    TAR        A112    TR      0098
>220999    PUR        R100    LK      0098
...

表验证器

 JobCode | Location | Code1 | Code2 | Code3 | Other column...
 100333    USA        A100    NS      0057
 100987    TAR        A112    TR      0098
>220999    PUR        R100    LK      0098
 220999    PUR        R100    LK      1009
 220999    PUR        R100    LK      3305
>100333    USA        A112    TR      0057
...

正如您在此表中看到的,只有两条记录是相同的。我需要识别 TableValidator 上不在 TableMaster 上的那些,以便将它们重新插入 TableMaster。

标签: sqlsql-servertsql

解决方案


您可以简单地NOT EXISTS()用作

INSERT INTO MasterTable (JobCode, Location, Code1, Code2, Code3)
SELECT JobCode, Location, Code1, Code2, Code3
FROM ValidatorTable VT
WHERE NOT EXISTS(
                  SELECT 1
                  FROM MasterTable MT
                  WHERE VT.JobCode = MT.JobCode 
                        AND VT.Location = MT.Location
                        AND VT.Code1 = MT.Code1
                        AND VT.Code2 = MT.Code2 
                        AND VT.Code3 = MT.Code3
                );

这里有一个db-fiddle


推荐阅读