如何从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中的另一个表中填充空列?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 PostgreSQL 中的另一个表中更新具有随机 id 的表