oracle 如何使用外键在表B中使用表A中的值

mrfwxfqh  于 2023-10-16  发布在  Oracle
关注(0)|答案(2)|浏览(132)

我只是想理解这个概念。
我有

TABLE A:   ID | NAME | NUMBER

TABLE B:   ID | A_ID (FK) | ENTERED_NUMBER

如何将TABLE A中的NUMBER中的数据放入TABLE B中的ENTERED_NUMBER?SQL是什么样子的?
另外,如果在Oracle APEX中输入相同的SQL,
表A在第2页,表B在第3页
因此,它们的字段/标签将是
表A

{ p2_ID, p2_NAME, p2_NUMBER }

表B

{ p3_ID, p3_A_ID, p3_ENTERED_NUMBER }
kupeojn6

kupeojn61#

您不需要这样做。您在FK -> PK上连接两个表并以这种方式检索数据

dhxwm5r4

dhxwm5r42#

一般来说,这就是主-细关系的样子。
注意:我重命名了number列;你不能这样命名它,它是为数据类型保留的,所以我使用了c_前缀。不过,如果你把它括在双引号中,你可以拥有这个名字,但我不建议你(也不建议任何人)这样做。

SQL> create table tablea
  2    (id       number constraint pk_a primary key,
  3     name     varchar2(20),
  4     c_number number
  5    );

Table created.

SQL> create table tableb
  2    (id       number constraint pk_b primary key,
  3     a_id     number constraint fk_ba references tablea (id),
  4     col      varchar2(2)
  5    );

Table created.

在两个表中使用相同的列是没有用的(这就是tablea.c_numbertableb.entered_number);你会违反 * 规范化 *,并产生一个小小的维护噩梦,因为你必须担心插入(将相同的值放入tableb),更新(如果你更新tablea,你会怎么做?修改tableb,可能。但是,如果你先修改tableb呢?你会把它传播回主表tablea吗?)。很快-不要这样做。
多个样本行:

SQL> insert into tablea (id, name, c_number) values (1, 'Little', 100);

1 row created.

SQL> insert into tablea (id, name, c_number) values (2, 'Foot', 101);

1 row created.

SQL> insert into tableb (id, a_id, col) values (123, 1, 'X');

1 row created.

连接这些表的查询:

SQL> select a.id a_id, a.name, a.c_number, b.col
  2  from tablea a join tableb b on a.id = b.a_id;

      A_ID NAME                   C_NUMBER CO
---------- -------------------- ---------- --
         1 Little                      100 X

SQL>

关于Apex:

  • tablea项放到第2页
  • tableb项放到第3页
  • 在第2页上创建指向此应用程序中另一页的链接(即第3页)。
  • 在链接属性中,将P3_A_ID项目值设置为P2_ID。这样,当您从第2页导航到第3页时,Apex将使用P2_ID值预填充P3_A_ID

相关问题