使用重复键从另一个表更新一个表

时间:2017-08-30 14:41:32

标签: sql oracle merge

我正在尝试将一个表中的数据合并到另一个表中。

表1(表1)

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(表2)

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

我正在尝试根据匹配col4Tab2将表col_to_update中的列Tab1映射到表Tab1.col2 = Tab2.col2中的列Tabl.col3 = Tab2.col3低于预期产量:

预期产出

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;

有没有办法获得预期的输出。

1 个答案:

答案 0 :(得分:1)

您只想更新 tab1

update tab1
set col_to_update =
(
  select min(tab2.col4) -- or whichever value you want to use
  from tab2
  where tab2.col2 = tab1.col2
    and tab2.col3 = tab1.col3
);