1

ここで本当に単純なものが欠けている可能性がありますが、なぜこのクエリが機能しないのか疑問に思っています。データベースとそのバックアップがあります。現在のバージョンには、バックアップ以降に追加された行が追加されています。バックアップに存在しない行を取得したかっただけで、これは機能するように見えますが、何も返されません。私は何を見逃していますか?「not」を削除すると、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)

テーブル スキーマが類似している場合は、except を使用できます。

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