如何使用生成的序列ID将数据从表和其他表之间的差异插入表中?

时间:2016-07-21 17:19:44

标签: sql database oracle oracle12c

我有两张桌子,我尝试将SECOND_TABLE的行插入FIRST_TABLE

我创建了两个表:

CREATE TABLE FIRST_TABLE(
    F_ID NUMBER(10) not null,
    F_NAME VARCHAR(8 BYTE) not null,
    F_DESCRIPTION NVARCHAR2(1000) not null
  );


  CREATE TABLE SECOND_TABLE(
    S_ID NUMBER(10) not null,
    S_NAME VARCHAR(8 BYTE) not null,
    S_DESCRIPTION NVARCHAR2(1000) not null
  );

我发现SECOND_TABLEFIRST_TABLE之间存在差异:

select S_NAME,S_DESCRIPTION from SECOND_TABLE minus select F_NAME,F_DESCRIPTION from FIRST_TABLE;

我创建了一个声明:

insert into FIRST_TABLE F_ID,F_NAME,F_DESCRIPTION (select * from SECOND_TABLE where not exists (select * from FIRST_TABLE where SECOND_TABLE.S_NAME = FIRST_TABLE.F_NAME));

但是此声明副本F_ID,我不知道如何将此声明更改为不复制F_ID,而是从序列CSS_F生成它。它应该看起来像:

insert into FIRST_TABLE (F_ID) values (CSS_F.nextval);

您能否告诉我如何在此声明中添加插入的genereted id?

1 个答案:

答案 0 :(得分:2)

您可以从second_table中选择名称和描述列,并使用序列插入F_ID列。

insert into FIRST_TABLE (F_ID,F_NAME,F_DESCRIPTION)
select CSS_F.nextval, S_NAME, S_DESCRIPTION
from SECOND_TABLE S
where not exists (select * from FIRST_TABLE where S.S_NAME = F_NAME)