sql - 如果没有记录 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。
解决方案
您可以简单地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
推荐阅读
- kubernetes - JupyterHub setup- CrashLoopBackOff 中的 Kubernetes hub pod
- javascript - 如何在反应中使用axios(post)
- xcode - NSWindow 中的 NSToolbar 无法正确显示
- php - 未显示警告或通知
- c++ - LibSSH:在会话中与脚本/bash 交互
- scala - 如何在scala中将数组转换为字符串
- postgresql - 如何更新 dockerized postgresql 数据库中的模式?
- r - 匹配文本中的确切单词列表
- excel - 如何解决导出 excel laravel 中的“函数 App\Exports\ItemsExport::__construct(), 0 传递的参数太少”?
- json - Jackson 将 XML 属性转换为平面 JSON