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

(実際には、内部結合であるためnull行が失われますが、それは重要ではありません。)

私が完全にできないことは、この新しい情報でAを更新することです!更新で「単一行のサブクエリが複数の行を返す」か、マージでクエリが非決定論的であるという素敵な結果が得られます。

私が示したように実際に3つのテーブルがあるとすると、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 に答える