sql查询返回两个表之间的差异

标签 sql sql-server sql-server-2008 sql-server-2005

我正在尝试比较两个表,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])))

这基本上会告诉我测试数据中的内容在我的真实数据中。这完全适合我需要做的事情。

最佳答案

(   SELECT * FROM table1
    EXCEPT
    SELECT * FROM table2)  
UNION ALL
(   SELECT * FROM table2
    EXCEPT
    SELECT * FROM table1) 

关于sql查询返回两个表之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2077807/

相关文章:

SQL查询员工数据库

sql-server - FOR JSON PATH结果导致SSMS被截断为2033个字符

sql-server - 从所有列中获取最后的 NOT NULL 值

sql - 显示季度可用的月份名称

mysql - 查找连接对

mysql - 有GROUP_CONCAT,有没有GROUP_SUM?

mysql - 具有相同 id 的多条记录通过 Cursor 将其设为 NULL

sql-server - 在 SQL Server 中使用带有动态查询的日期时间

sql-server - 批处理文件到 "Script"数据库

c# - 在 SQL 语句中,在哪里/如何为占位符放置值