我試圖將數據從一個表合併到另一個表中。使用重複密鑰從另一個表中更新一個表
表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
我試圖基於匹配Tab1.col2 = Tab2.col2
和Tabl.col3 = Tab2.col3
在表Tab1
從表Tab2
映射列col4
成col_to_update
柱以低於預期輸出:
預期輸出
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