sql-server - 在两个表的同一列上查找缺失值

标签 sql-server tsql compare diff missing-data

假设您在 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/

相关文章:

Sql服务器CTE获取父级的子级,然后用父级值更新子级

java - 将 ArrayList 的内容与结果集进行比较

linux - shell 脚本 1 : [: [: unexpected operator

javascript - 数组值传递到 SQL Server IN 查询

SQL Server Reporting Studio 报告显示 "ERROR#"或无效数据类型错误

sql - 如何使用列中的不同值作为新表的列名创建表?

sql-server - 如何优化执行时间过长的存储过程?

sql-server - 如何在sql server中的计算字段上设置外键约束?

r - 如何比较两个表的值?

c# - 保持 SQL Server 表在数据库中排序