1

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

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

1 回答 1

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)

如果您的表架构相似,则可以使用以下内容:

select * from db.dbo.table as t
except
select * from db_backup.dbo.table
于 2013-10-02T19:08:53.847 回答