给定下表排列:
A - B - C
其中 B 是 A 和 C 之间的连接表。事实证明 A 和 C 之间的域关系确实是一对多(A 侧有很多),我想重构我们的模式以反映这一事实。
是否可以编写一条 SQL UPDATE 语句将 C 的所有正确 id 插入 A 的正确行(A 的每一行都将有一个 C id)?还是需要什么手续?
注意:我将接受仅 Oracle 的答案,因为这是唯一需要进行迁移的地方。
update tableA
set foreignKeyColumn = (
select columnC
from tableB
where columnA = tableA.columnA
);
实际上看到完整的表结构会更容易,但这应该可行。
-- 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;
当然
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)