使用自联接更新

丽达

我在oracle中有如下表结构:

create table uet_tmp_course
(
    "COURSE_ID" NUMBER(4,0) NOT NULL ENABLE, 
    "CODE" VARCHAR2(10 BYTE) NOT NULL ENABLE, 
    "TITLE" VARCHAR2(50 BYTE) NOT NULL ENABLE, 
    "CREDIT_HRS" NUMBER(4,2) NOT NULL ENABLE, 
    "LEVEL_ID" NUMBER(2,0),
  "STATUS" NUMBER(2,0),
  "COURSE_TYPE_ID" VARCHAR2(50 BYTE), 
  "EQUIVALENCE" VARCHAR2(10 BYTE),
  "LAB_CODE" VARCHAR2(10 BYTE),

     CONSTRAINT "PK_COURSE1" PRIMARY KEY ("COURSE_ID"),

     CONSTRAINT "UK_COURSE_CODE1" UNIQUE ("CODE")
);

我想用 course_id 而不是代码更新列 lab_code 的值(即第 8 列)。例如,在第一行而不是“SE-101L”,我想要“102”,即“SE-101L”的 course_id。我尝试过连接,但它们会导致错误,例如缺少括号或单行查询返回多于一行。如果有人可以提供帮助,我会很高兴。谢谢你。

在此处输入图片说明

贡萨洛·洛列托

这将更新course_id相应lab_code.

UPDATE a
FROM uet_tmp_course a
INNER JOIN uet_tmp_course b
ON a.LAB_CODE = b.CODE
SET a.LAB_CODE = b.course_id;

甲骨文

UPDATE 
(SELECT t1.LAB_CODE as OLD, t2.course_id as NEW
 FROM uet_tmp_course t1
 INNER JOIN uet_tmp_course t2
 ON t1.LAB_CODE = t2.CODE
) t
SET t.OLD = t.NEW

您还可以采取其他措施来防止每次更新行(请记住也在您的应用程序中进行管理):

alter table uet_tmp_course
add constraint FK_uet_tmp_course_lab
foreign key (lab_code) references uet_tmp_course(course_id)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章