Oracle中update更新多列

6 篇文章 0 订阅

一、创建数据表:

-- 创建test1
CREATE TABLE TEST1
(
    ID NUMBER(8) PRIMARY KEY NOT NULL,
    NAME CHAR(8) NOT NULL,
    AGE NUMBER(8) NULL,
    SEX CHAR(2) NULL 
);
INSERT INTO TEST1 VALUES (1,'鲁班',18,'男');
INSERT INTO TEST1 VALUES (2,'虞姬',27,'女');
INSERT INTO TEST1 VALUES (3,'剑圣',45,'男');
-- 创建test2
CREATE TABLE TEST2
(
    ID NUMBER(8) PRIMARY KEY NOT NULL,
    NAME CHAR(8) NOT NULL,
    AGE NUMBER(8) NULL,
    SEX CHAR(2) NULL,
    HOBBY VARCHAR2(200) NULL
);
INSERT INTO TEST2 VALUES (1,'齐天大圣',12,'男','打妖怪');
INSERT INTO TEST2 VALUES (2,'猪八戒',45,'男','吃货');
INSERT INTO TEST2 VALUES (5,'紫霞仙子',22,'女','至尊宝');
INSERT INTO TEST2 VALUES (6,'哇哈哈',34,'女','睡觉');

二、更新一张表中的某一列的值:

UPDATE TEST1 SET NAME='张三' where id=1;

三、更新一张表中的多列

update exam_record set submit_time='2099-01-01 00:00:00',score=0
where submit_time is null and start_time<'2021-09-01'

四、多表关联更新

update test1 a set a.name=
(select b.name from test2 b where a.id=b.id)

这样的写法是不对的,此写法会将没有匹配上的列更新为空,但是我这里会报错,因为我创建表格的时候限制name是not null,如下图:
在这里插入图片描述
这也进一步说明了后面不加限制条件会将未匹配的列更新为空值,正确的写法:

update test1 set (name,age)=
(select '张三',89 from dual where id=1)
where id=1;

或者多表:

update test1 a set (a.name,a.age)=
(select b.name,b.age from test2 b where a.id=b.id)
where exists (select 1 from test2 c where a.id=c.id);

或者为了更清楚的看明白,可以这样写:

update test1 a set (a.name,a.age)=
(select b.name,b.age from test2 b where a.id=b.id)
where a.id in (select id from test2 );
update test1 a set name=(select replace(b.name,substr(b.name,1,2),'s')
from test1 b where a.id=b.id ) where id=1;
  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值