あるテーブルのデータを別のテーブルにマージしようとしています。重複するキーで別のテーブルのテーブルを更新する
表1(Tab1を)
ID col2 col3 col_to_update
1 s1 a1 null
2 s1 a2 null
3 s1 a2 null
4 s2 a1 null
5 s3 a1 null
6 s4 a1 null
表2(TAB2)
ID col2 col3 col4
10 s1 a1 v1
11 s1 a1 v2
12 s1 a2 v3
13 s2 a1 v4
14 s3 a1 v5
15 s4 a1 v6
16 s4 a1 v7
Iは、テーブルの列col_to_update
にテーブルTab2
からカラムcol4
をマッピングしようとしていTab1
Tab1.col2 = Tab2.col2
とTabl.col3 = Tab2.col3
のマッチングに基づきます期待される出力以下になるようにする:
予想される出力0
ID col2 col3 col4
1 s1 a1 v1
2 s1 a2 v3
3 s1 a2 v3
4 s2 a1 v4
5 s3 a1 v5
6 s4 a1 v6
は、私は、クエリ以下で失敗してみました:
MERGE INTO Tab1 x1
USING
(
SELECT t1.id as t1id, t2.id as t2id, t2.col2 t2col2, t2.col3 t2col3, t2.col4 from Tab2 t2
JOIN Tab1 t1 ON t2.col2 = t1.col2 AND t2.col3 = t1.col3
) x2
ON (x1.id = x2.t1id)
WHEN MATCHED THEN UPDATE SET
x1.col_to_update = x2.col4;
が期待される出力を取得する方法があります。
:「ソース」の表にアップデートするために使用されるべき値のための複数の候補があります。潜在的な候補のうちのどれを使用すべきですか?あなたの例では、ID = 1のために、なぜあなたはTab2からv1ではなくv2を選択しましたか? – mathguy
はいTab2には複数の潜在的な一致があります。最初に一致するものまたは一致するものをマップすることを期待しています。 – Brij
"最初の"は定義されていません - 注文はありますか?または、最小値を意味しますか? Thorstenはすでにそれを行う方法を示しています。 – mathguy