2013-10-02 74 views
1

我可能錯過了一些非常簡單的東西,但我想知道爲什麼這個查詢不起作用。我有一個數據庫和它的備份,當前版本包含自備份以來添加的更多行。我只想獲取備份中不存在的行,這看起來應該可以工作,但不會返回任何內容。我錯過了什麼,它怎麼沒有返回?當我刪除'不'時,它返回,就好像沒有where子句一樣。似乎它應該有相反的效果。SQL不存在比較備份

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

回答

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 
+1

@ awhitehouse104你可以只是在這種情況下使用 –

+0

感謝即完美,我除了不熟悉 – aw04