如何从oracle中的另一个表中填充空列?

Posted

技术标签:

【中文标题】如何从oracle中的另一个表中填充空列?【英文标题】:How to fill empty column from another table in oracle? 【发布时间】:2021-12-23 15:38:18 【问题描述】:

我想从另一个表中填充一个空字段,它们都具有相同的名称。 只有3张桌子。 我不想对helper_id 做任何事情,我只需要在person 表中的name 和表emdadgar 等于在表helper 中填写emp_id 时填写emp_id 列那name。 以下是创建语句:

CREATE TABLE  "HELPER" 
   (    "HELPER_ID" NUMBER, 
    "PERSON_ID" NUMBER, 
    "EMP_ID" NUMBER, 
     CONSTRAINT "PK_HELPER" PRIMARY KEY ("HELPER_ID")
  USING INDEX  ENABLE
   )  DEFAULT COLLATION "USING_NLS_COMP"
CREATE TABLE  "EMDADGAR" 
   (    "EMP_ID" NUMBER, 
    "NAME" VARCHAR2(20) COLLATE "USING_NLS_COMP", 
     CONSTRAINT "PK_EMDADGAR" PRIMARY KEY ("EMP_ID")
  USING INDEX  ENABLE
   )  DEFAULT COLLATION "USING_NLS_COMP"
CREATE TABLE  "PERSON" 
   (    "PERSON_ID" NUMBER, 
    "NAME" VARCHAR2(20) COLLATE "USING_NLS_COMP", 
     CONSTRAINT "PK_PERSON" PRIMARY KEY ("PERSON_ID")
  USING INDEX  ENABLE
   )  DEFAULT COLLATION "USING_NLS_COMP"
INSERT INTO helper(emp_id)
SELECT emdadgar.emp_id FROM emdadgar
    INNER JOIN person ON person.name=emdadgar.name
    LEFT JOIN helper ON person.person_id=helper.person_id
WHERE NOT EXISTS (SELECT emdadgar.emp_id FROM emdadger WHERE emdadger.emp_id=helper.emp_id); 

这是错误:

ORA-01400: cannot insert NULL into
 ("SQL_VCLPLQLNJJURNCRCUBTRGPDCG"."HELPER"."HELPER_ID") ORA-06512: at "SYS.DBMS_SQL", line 1721

这是更好地显示问题的图片:

【问题讨论】:

当您想要更改表中现有行的列值时,请使用UPDATE 语句。 helper.helper_id 是主键,因此当您在该表中插入内容时,它不能为空。你可以用一个序列自动填充它。 你需要更新table helper,并且select语句中的join都应该是inner 我已经测试了UPDATE 语句,但错误类似于table or view does not exist 所以我发现了问题所在。首先正如@Serg 所说,我应该使用 UPDATE 语句,另一个问题是这个 EMDADGAR 表。它在另一个模式中,所以我应该声明它,但问题是现在所有行都具有相同的 emp_id。 【参考方案1】:

我们应该声明架构并使用MEREGE 语句。

MERGE INTO OPR.TBL_HELPER t1
USING (SELECT EMD.ID as large_id, TP.ID as person_id, EMD.PERSONELID as personel,
           EMD.EMDADGARID, TP.NAME, HL.ID as helper_id FROM SA.EMDADGAR EMD
           INNER JOIN OPR.TBL_PERSONS TP on EMD.NAME = TP.NAME
           INNER JOIN OPR.TBL_HELPER HL ON TP.ID = HL.PERSON_ID
       WHERE EMD.NAME LIKE TP.NAME AND HL.LARGE_ID is null) t2
ON (t1.PERSON_ID = t2.PERSON_ID)
WHEN MATCHED THEN
    UPDATE SET t1.LARGE_ID = t2.large_id;

【讨论】:

以上是关于如何从oracle中的另一个表中填充空列?的主要内容,如果未能解决你的问题,请参考以下文章

oracle如何向空表中添加一个类型为clob的非空列

如何从同一表单中的另一个组合框填充组合框?

如何从 PostgreSQL 中的另一个表中更新具有随机 id 的表

如何在 oracle 中使可空列不为空

当嵌套表属于记录类型时,如何将数据填充到 Oracle 中的嵌套表中

如果存在则从表中选择,否则从oracle中的另一个表中选择