最佳答案
我试图比较两个表,SQL Server,以验证一些数据。我想从两个表中返回数据在其中一个或另一个中的所有行。本质上,我想展示所有的差异。我需要检查这样做的三段数据,FirstName, LastName和产品。
我对SQL相当陌生,似乎我找到的很多解决方案都过于复杂了。我不需要担心null。
我是这样开始的:
SELECT DISTINCT [First Name], [Last Name], [Product Name] FROM [Temp Test Data]
WHERE ([First Name] NOT IN (SELECT [First Name]
FROM [Real Data]))
不过我很难继续下去。
谢谢!
编辑:
基于@treaschf的回答,我一直在尝试使用以下查询的变体:
SELECT td.[First Name], td.[Last Name], td.[Product Name]
FROM [Temp Test Data] td FULL OUTER JOIN [Data] AS d
ON td.[First Name] = d.[First Name] AND td.[Last Name] = d.[Last Name]
WHERE (d.[First Name] = NULL) AND (d.[Last Name] = NULL)
但是我总是得到0结果,当我知道td中至少有1行不是在d中。
编辑:
好吧,我想我明白了。至少在我几分钟的测试中,它似乎工作得足够好。
SELECT [First Name], [Last Name]
FROM [Temp Test Data] AS td
WHERE (NOT EXISTS
(SELECT [First Name], [Last Name]
FROM [Data] AS d
WHERE ([First Name] = td.[First Name]) OR ([Last Name] = td.[Last Name])))
这基本上是要告诉我在我的测试数据中什么是不在我的真实数据中。这完全可以满足我的需求。