2016-06-20 14 views
0

SQLサーバー2012を使用しています。 同じ構造の2つのテーブルがあります。 (ID、C2、C3、C4の4つの列があるとします) Table1からTable2にデータをコピーします。SQLサーバーの複合主キーから重複を削除

2つのテーブルの唯一の違いは、Table1にはローカルIDが 'ID'フィールドに含まれ、テーブル2にはグローバルIDが含まれていることです。

ローカルIDとグローバルIDの間のこのマッピングを含む別の3番目のテーブルがあります。 (複数のローカルIDの一つのグローバルIDにマッピングすることができる)

例:ロシア ID「ABCD」はグローバルIDとすることができる中国で123 ID「CDEF」は、ロシアのabcdの従って123 グローバルIDであってもよいです基本的に中国のcdef(このマッピングはtable3に格納されています)

私は、Table1にあるローカルIDに対応するtable3のGlobalIDを取得し、table2に挿入します。

表2には、列ID + C2に定義された主キー制約があります。

問題は、データが重複する可能性が高いことです。そのため、ID + C2の異なる組み合わせのみを挿入する必要があります。 (クラスタ化PK)

誰か助けてもらえますか?これは混乱している場合はごめんなさい。

私は今このクエリを持っていますが、T1からT2にデータをコピーするときに重複を排除しないため、PKでエラーが発生します。

INSERT INTO TABLE2 
(ID, 
C2, 
C3, 
C4) 

SELECT T3.ID, 
     T1.C2, 
     T1.C3, 
     T1.C4 

FROM TABLE1 T1 
JOIN TABLE3 T3 ON T1.ID = T3.ID 
JOIN TABLE2 T2 ON T2.ID = T1.ID 
+0

移動またはコピーしますか? (つまり、元の場所にデータを保持しますか?) – jarlh

+0

[良いSQL質問をするためのヒント](http://meta.stackoverflow.com/a/271056/2835541)をお読みください。私は、サンプルコードを投稿するか、少なくともあなたのDDLを投稿することをお勧めします。 –

+0

@ChrisPickford - こんにちはクリス、私はスクリプトを作成するための助けを求めているので、ここでサンプルコードをどのように提供できるかはわかりません。 – Newbie

答えて

0

私はわからないんだけど、私はあなたがどんな選択を使用するので、あなたのニーズに合わせてそれを変更することができます

INSERT INTO Table2 (globalID) 
    SELECT DISTINCT m.globalID from Mapping m inner join Table1 t 
      on t.country = m.country and t.localId = m.localID 

ような何かをしたいと思います。