2017-10-24 3 views
-1

毎日実行されるETLプロセス(CSV to SQLデータベース)がありますが、ソース内のデータが変更されることがあるため、翌日に更新ファイル。コンポジットプライマリキーに基づいてSQLテーブルを更新

すべての相違点を見つけるためにSQL文を書くにはどうすればよいですか?

たとえば、のはTable_1FK_1FK_2FK_3からなる複合PRIMARY KEYを持っているとしましょう。

これはSQLまたはETLプロセスで行いますか?

ありがとうございました。

この問題は広すぎます。無視。

+0

私はあなたがここで何を求めているのか分かりません。 –

+0

Google.co.in ..... –

答えて

1

EXCEPTを使用すると、IDsが見つからない場合があります。たとえば:

SELECT FK_1, FK_2, FK_2 
FROM new_data_table 
EXCEPT 
SELECT FK_1, FK_2, FK_2 
FROM current_data_table; 

それはすべての列を挿入するためにnew_data_tableにこの新しいテーブルを結合するために、これらのIDをマテリアライズとする(パフォーマンス前向きに)良くなります。

これを1つのクエリで行う必要がある場合は、簡単なLEFT JOINを使用できます。たとえば:

INSERT INTO current_data_table 
SELECT A.* 
FROM new_data_table A 
LEFT JOIN current_data_table B 
    ON A.FK_1 = B.FK_1 
    AND A.FK_2 = B.FK_2 
    AND A.FK_3 = B.FK_3 
WHRE B.[FK_1] IS NULL; 

アイデアはcurrent_data_tableテーブル(WHRE B.[FK_1] IS NULL)での一致がない、そのためnew_data_tableすべてのレコードを取得することです。

関連する問題