sql - 使用自加入更新
问题描述
我在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。我尝试过连接,但它们会导致括号丢失或单行查询返回多行等错误。如果有人可以提供帮助,我会很高兴。谢谢你。
解决方案
这将更新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)
推荐阅读
- php - 使用 passthru 跳过代理的 MP4 文件
- asp.net - neo4client 合并并不总是有效
- android - java.lang.RuntimeException:布局不能为空
- javascript - XMLHTTP 请求:即使在节流限制下也有太多请求
- amp-html - 修复 AMP 样式表错误
- exception - 在 Perl 6 中,如何打印可能在编译时抛出的异常类型?
- google-project-tango - 探戈项目 / arcore 区域映射
- python - Python / Dash:图形的单个子图中的多个图形
- javascript - 删除所有活动类然后切换类 - javascript
- r - 数据框中的负索引是什么意思?