鉴于以下表格安排:
A - B - C
其中B是A和C之间的连接表。事实证明A和C之间的域关系确实是一对多(A方面很多),我想重构我们的模式以反映这一事实。
是否可以编写SQL UPDATE语句将C的所有正确id插入到A的正确行中(A的每一行只有一个C id)?或者是必要的程序?
注意:我将接受仅限Oracle的答案,因为这是唯一需要迁移的地方。
答案 0 :(得分:2)
update tableA
set foreignKeyColumn = (
select columnC
from tableB
where columnA = tableA.columnA
);
实际上看到完整的表格结构会让它变得更容易,但这应该可行。
答案 1 :(得分: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;
答案 2 :(得分: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)