比较备份不存在SQL

时间:2013-10-02 19:07:13

标签: sql sql-server

我可能在这里遗漏了一些非常简单的东西,但我想知道为什么这个查询不起作用。我有一个数据库和备份,当前版本包含自备份以来添加的更多行。我只想获得备份中不存在的行,这看起来应该可以工作但什么都不返回。我错过了什么,它什么都没有?当我删除'not'时,它返回就好像没有where子句一样。似乎它应该产生相反的效果。

select *
from db.dbo.table
where not exists (select * from db_backup.dbo.table)

1 个答案:

答案 0 :(得分:2)

您的查询实际上检查db_backup.dbo.table中是否有任何记录。因此,如果有0条记录,它将返回db.dbo.table的所有行,否则它将不返回任何内容。你必须使用某种键,如下所示:

select *
from db.dbo.table as t
where not exists (select * from db_backup.dbo.table as t2 where t2.id = t.id)

如果您的表架构类似,您可以使用except:

select * from db.dbo.table as t
except
select * from db_backup.dbo.table