1

次の表の配置が与えられます。

A - B - C

ここで、B は A と C の間の結合テーブルです。A と C の間のドメイン関係は、真に 1 対多 (A 側で多) であることがわかりました。この事実を反映するようにスキーマをリファクタリングしたいと思います。

C のすべての正しい ID を A の適切な行に挿入する SQL UPDATE ステートメントを作成することは可能ですか (A の各行には正確に 1 つの C ID があります)。それとも手続きが必要ですか?

注:この移行が必要になる唯一の場所であるため、Oracleのみの回答を受け入れます。

4

3 に答える 3

2
-- assuming you have tableA (id_a), tableB (id_a,id_c), tableC (id_c)

alter table tableA add id_c int;
alter table tableA add constraint foreign key (id_c) references tableC(id_c);

merge into tableA a
using tableB b
on (a.id_a = b.id_a)
when matched then update set
  a.id_c = b.id_c;

commit;
于 2013-03-13T14:09:54.197 に答える
1

もちろん

Alter Table C Add FK2A int Null
Update C Set c.FK2A =
      (Select FK2A From B
       Where FK2C = C.PK)
Alter Table C Alter Column FK2A int Not Null
Alter Table C Add Constraint FKTableCToA 
              Foreign Key (FK2A)
              References A (PK)
于 2013-03-13T14:10:57.907 に答える