假设您在 SQL Server 数据库中有两个表,这两个表具有相同的架构。我想比较两个表上的单个列,并找到 table1 中缺少但 table2 中的值。在每个查询中得到一个不同的列表后,我一直在 Excel 中使用宏手动执行此操作,但是如果我有一个查询,它的工作量会减少。如何通过 T-SQL 查找丢失的记录?我想对以下数据类型执行此操作:datetime, nvarchar & bigint
.
SELECT DISTINCT [dbo].[table1].[column1]
FROM [dbo].[table1]
ORDER BY [dbo].[table1].[column1] DESC
SELECT DISTINCT [dbo].[table2].[column1]
FROM [dbo].[table2]
ORDER BY [dbo].[table2].[column1] DESC
最佳答案
有几种方法可以做到这一点......LEFT JOIN
:
SELECT DISTINCT t2.column1
FROM dbo.table2 t2
LEFT JOIN dbo.table1 t1
ON t2.Column1 = t1.Column1
WHERE t1.Column1 IS NULL
NOT EXISTS
:SELECT DISTINCT t2.column1
FROM dbo.table2 t2
WHERE NOT EXISTS (
SELECT 1
FROM dbo.table1 t1
WHERE t1.column1 = t2.column1
)
NOT IN
:SELECT DISTINCT t2.column1
FROM dbo.table2 t2
WHERE t2.column1 NOT IN (
SELECT t1.column1
FROM dbo.table1 t1
)
这些方法的行为和效率略有不同……主要是基于
NULL
的存在。列中的值,因此请尝试每种方法以找到最有效的方法来提供您期望的结果。
关于sql-server - 在两个表的同一列上查找缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15574230/