2016-07-12 8 views
0

私は2つのデータベースを持っており、両方のデータベースに共通の値の列を持つテーブルがあります。私が達成しようとしているのは、すべてのレコードを取得することです。ここで、database1のtable1(共通の値を持つ)レコードには、database2のtable2(共通の値を持つ)に対応するレコードがありません。 これらのレコードを取得する最も良い方法はどれですか?データベースのパフォーマンスに影響を与えない、リソースを軽視する方法はありますか?例えばSQL:2つのデータベースで、どちらも共通の値の列を持つテーブルを持っています。行が見つからない方法

:1,2,3およびデータベース2 table1の列 "番号" の値1,2,3,4,5 があります

Database1 
Table1 - id/number(common value)/object/name 

Database2 
Table1 - table_id/number(common value)/table_object/table_name 

がDATABASE1 TABLE1コラム "数" が値を持っていることを言うことができますこの2つのレコードを見つけ出す必要がありますが、database1には欠けているものがありますが、database2には存在しません(この例では、database2の「数値」の値が4と5のレコードを探しています)。

+0

これを試してみてください... 'どこIDません(db2.table2からIDを選択)でdb1.table1から選択*; DBMSは、使用している' –

+2

? SQLはDBMS製品ではなく、単に_query言語です。 –

+0

これにはツールがあります:購入、作成しないでください。 [Redgate SQL Data Compare](http://www.red-gate.com/products/sql-development/sql-data-compare/)。 – onedaywhen

答えて

0

オブジェクトテーブル、プロシージャ)を作成するには、異なるデータベースのオブジェクトにアクセスするためのメカニズムをセットアップする必要があります。

Cross Database Access in SQL ServerまたはLinked Serverについては、これらのリソースを参照できます。クエリで両方のデータベースにアクセスすることができたら

、その後、あなたのクエリはかなりまっすぐ進むあなたは三つの方法からこれらの欠落しているレコードを達することができるこの

SELECT database2.table1.number FROM database2.table1 
WHERE database2.table1.number NOT EXISTS (SELECT database1.table1.number FROM database1.table1) 
+0

これはNULLを正しく処理できません。 database1.table1にNULLがある場合、このクエリは0レコードを返します。相関サブクエリでNOT EXISTSを使用するか、NULLを適切に処理してください。 – Pred

+0

@Predは、ノートのおかげで、投稿が – Sachin

+0

Aaaandに更新されたことに同意します。それでも間違っています。 – Pred

0

のようになります: *それことに注意してくださいdatabase1と比較してdatabase2の欠損値を見つけたい場合に役立ちます。また、テーブルのIdも一般的な場合は、numberではなくidで結合する方がよいでしょう。

select * 
from database2.dbo.table1 As D2 
left join database1.dbo.table1 As D1 on D1.number = D2.number 
where D1.Number is null 


select * 
from database2.dbo.table1 
where number not in (
select number from database1.dbo.table1) 

select * 
from database2.dbo.table1 As D2 
where number NOT EXISTS (
select number from database1.dbo.table1 As D1 where D1.number = D2.number ) 
+0

あなたのNOT INクエリは、Sachinのクエリと同じ問題があります。 database1にnumber = NULLのレコードがあると、ゼロレコードが返されます。 where条件を追加するか、またはその数がnull可能でないことを確認してください。 – Pred

+0

あなたの返信をありがとうございました!いくつかの追加の質問が発生しました。上記のクエリは、データベースが同じサーバー上にある場合はうまく機能するようです。 データベースがリンクされている別のサーバーにある場合は、あまり流暢にそうではありません。照合問題もあり、照合節を使用する必要がありました。パフォーマンスに影響しますか? これらのテーブルを比較する他のリソースはありますか? – Ziil

+0

thats右、私は数字がnullableではないと仮定しますが、数値がnullの場合、次のようなクエリを書くことができます: 'select * from database2.dbo.table1 ここでnumberはnullではなく、数字は( から選択してください) database1.dbo.table1ここでnumberはnullではありません) ' –

関連する問題