1

異なるデータベースに類似したスキーマを持つ2つの異なるテーブルがあります。これら2つのテーブル間でレコードを比較するための最良の方法は何ですか。最初のテーブルに存在するレコードを見つける必要があります。その対応するレコードは、いくつかのwhere句を使用して最初のテーブルからレコードをフィルタリングする2番目のテーブルには存在しません。これまでのところ、私はこのSQL構造を持ってきました:

Select t1_col1, t1_ col2 from table1
where t1_col1=<condition> AND 
t1_col2=<> AND
NOT EXISTS 
(SELECT * FROM
table2
WHERE
t1_col1=t2_col1 AND
t1_col2=t2_col2)

これを行うためのより良い方法はありますか?

上記のクエリは問題ないように見えますが、クエリの最初の部分では結果セットが大幅に減少するため、クエリの最初の部分の条件を評価せずに行ごとの比較を行っていると思われます。これは起こっていますか?

4

2 に答える 2

3

キーワードを使用するだけexceptです!!!

Select t1_col1, t1_ col2 from table1
    where t1_col1=<condition> AND 
    t1_col2=<condition> 
except
SELECT t2_col1, t2_ col2 FROM table2

右側のクエリからも返されない、EXCEPT オペランドの左側のクエリからの個別の値が返されます。

詳細については、MSDNを参照してください。

于 2011-03-28T09:29:09.603 に答える
1

両方のテーブルのデータが同じ主キーを持つことが予想される場合は、IN キーワードを使用して、他のテーブルにないデータをフィルタリングできます。これが最も簡単な方法かもしれません。

Redgate Data Compareなどのサードパーティ ツールを使用できる場合は、試してみることができます。これは非常に優れたツールです。Visual Studio 2010 Ultimate エディションにもこの機能があります。

于 2011-03-28T09:10:42.897 に答える