【发布时间】:2017-12-13 12:07:49
【问题描述】:
我有一个具有 3 个属性的表 A:
ID (PK)、UNIT(varchar2)、VALUE(数字)
我还有另一个表 B,它通过外键引用表 A 的 PK。
ID,FK_TABLE_A
表 B 中已有记录,但属性 FK_TABLE_A 的值为空。我想要的是,表 B 中的所有记录通过将新数据插入表 A 并将新创建的主键作为外键引用到表 B 中来获得对表 A PK 的自己的唯一引用。 p>
到目前为止我做了什么: 我现在可以通过以下 SQL 插入新数据:
INSERT INTO TABLE_A(ID, UNIT, VALUE) VALUES (TABKE_A_SEQ.nextval, 'SOME_STRING', 1);
我可以手动更新对表 B 的引用
UPDATE TABLE_B SET FK_TABLE_A = 123; //123 is just an example PK
但我不想在每次数据库时都查询每条记录,而是想以某种方式将第一个 insert 与第二个 update 组合在一个查询中。
以便更新以表 A 中新创建的 PK 作为参考。
这可能吗?
我使用 Oracle 作为数据库。
【问题讨论】:
-
您的意思是在更新中使用
TABKE_A_SEQ.currval而不是123?如果还没有 PK/FK 关系,如何知道要更新表 B 中的哪些行? -
您的 TABLE_B 正在引用 TABLE_A。你怎么知道要更新哪个子行?如果是TABLE_A中的insert,也应该是TABLE_B中的insert,而不是update。
-
Table_B 中的每条记录当然应该得到不同的外键。 (这是表A中新创建的条目的主键)