2017-03-28 30 views
0

同じ数の列を持つ3つのテーブルがあります。SQL - 2つのテーブルを結合し、存在しない場合は3番目のテーブルに挿入します。

最初の表オフロード
二番目の表Offload_Temp
ファイナル表Merge_Testデータを定期的Offload_Tempに挿入さ

(すべての行が新しいデータを挿入する前に削除される)

delete from Offload_Temp 

は、私は何を達成しようとしています...ユニオン/ オフロードOffload_Tempをマージし、Merge_Test

に挿入Merge_Testはすでにそれにいくつかのデータが含まれているために起こっています。私は重複を避けたいと思います。

次は私のクエリです:

INSERT INTO Merge_Test SELECT * FROM Offload UNION SELECT * FROM Offload_Temp EXCEPT (SELECT * FROM Merge_Test) 

たびOffload_Tempが新しいデータで挿入されている(これは、同じデータを含んでいてもよい)と、上記のクエリは、Merge_Test

このプロセスで複製を作成し、定期的に繰り返される。

Merge_Testでの複製を避けるにはどうすればよいですか?

+0

クエリを2回目に明確にするためです。私は重複を見つけることはありません。私は何か見落としてますか? – maSTAShuFu

+0

はい、ダミーデータに重複はありません。たぶん私はもう少しダンプして試してみる必要があります。 私が達成しようとしているのは...メインテーブルがあります。オフロードとセカンダリテーブルOffload_Tempセカンダリテーブルのデータが削除され、新しいデータが供給される予定です。非重複値をマージしてOffload_TempからOffloadに挿入します。ご意見をお聞かせください。 – Tango

+0

あなたは私の答えがうまくいかないと言っていますか? – maSTAShuFu

答えて

0

これを試すことができます。

INSERT INTO Merge_Test 
select * from (
    SELECT 
    * 
    FROM Offload 
    UNION 
    SELECT 
    * 
    FROM Offload_Temp 

) x 
    except 
    SELECT 
    * 
    FROM Merge_Test 

offloadとoffload_tempが同じデータを持っている場合は、以下のクエリを試してください。言い換えると、UNIONは明確な結果をもたらすはずです。すべてのテーブルのデータを表示するほうが良いかもしれません。

INSERT INTO Merge_Test 
    select * from (
     SELECT 
     * 
     FROM Offload 
     except 
     SELECT 
     * 
     FROM Offload_Temp 

    ) x 
     except 
     SELECT 
     * 
     FROM Merge_Test 
+0

** Merge_Test **テーブルに重複を作成しています** Offload_Temp **に** Merge_Test **に既に存在するデータが含まれている可能性があり、重複を作成しているクエリを実行しています。 – Tango

+0

あなたはoffloadとoffload_tempが同じデータを持つことができると言っていますか? – maSTAShuFu

+0

はい、同じデータが含まれている可能性があります。私は重複を避けたい。 。 – Tango

関連する問題