1

我有一张这样的桌子:

A
ID_A    ID_1   ID_2
1       1      (null)
2       3      (null)
3       7      (null)

B
ID_B    ID_1   ID_2
1       (null) 2
2       (null) 4
3       (null) 6

REF     
ID_A    ID_B
1       2
3       1

根据 ref 表,ID_A 为 2 的对象与 ID_B 为 1 的对象相同。

因此,我应该能够以这种方式更新表:

A
ID_A    ID_1   ID_2
1       1      4
2       3      (null)
3       7      2

实际上,如果您执行以下查询,您会得到该结果:

select
  A.ID_A, B.ID_1, C.ID_2
from
  A, B, REF
where
  A.ID_A = REF.ID_A
  AND REF.ID_B = B.ID_B

(实际上你丢失了空行,因为它是一个内部连接,但这不是重点。)

我完全无法做的是用这个新信息更新 A!我要么得到“单行子查询返回多行”的更新,要么得到可爱的结果,即我的查询在合并时是不确定的。

鉴于我确实拥有我所展示的三个表,我如何编写查询以正确更新 id_2?;

4

1 回答 1

2
merge into A w
using(select a.id_a
           , b.id_2
       from a 
       join rf on (a.id_a = rf.id_a)
       join b   on (b.id_b = rf.id_b) 
     ) q
  on (q.id_a = w.id_a )
when matched then
  update 
     set w.id_2 = q.id_2

SQL小提琴

于 2012-09-14T19:18:22.823 回答