我正在尝试比较两个表 SQL Server,以验证一些数据。我想从两个表中返回数据在一个或另一个中的所有行。本质上,我想展示所有的差异。为此,我需要检查三个数据,FirstName、LastName 和 Product。
我对 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)
但是当我知道 td 中至少有 1 行不在 d 中时,我不断得到 0 结果。
编辑:
好吧,我想我明白了。至少在我几分钟的测试中,它似乎工作得很好。
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])))
这基本上是要告诉我我的测试数据中有 什么不在 我的真实数据中。对于我需要做的事情来说,这完全没问题。
原文由 Casey 发布,翻译遵循 CC BY-SA 4.0 许可协议
IF you have tables
A
andB
, both withC
, here are the records, which are present in tableA
but not在B
:要使用单个查询获得所有差异,必须使用完全连接,如下所示:
在这种情况下,您需要知道的是,当可以在
A
中找到记录,但在B
中找不到记录时,比来自B
的列将为 NULL,对于那些存在于B
而不是A
的列,来自A
的列将是空的。