首页 > 解决方案 > 使用自加入更新

问题描述

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

在此处输入图像描述

标签: sqloracle

解决方案


这将更新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)

推荐阅读