oracle数据库中修改表中某字段的值等于另一个表中字段的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle数据库中修改表中某字段的值等于另一个表中字段的值相关的知识,希望对你有一定的参考价值。

见图, T1表和T2表
需求: 修改T2表中的C_date字段的值,等于T1表中的EventTime的值, 对应关系是T1.ID = T2.ID
T1表中的ID是PK

1、创建测试表,

create table test_t1(id varchar(30) , EventTime date);

create table test_t2(id varchar(30) , C_date date);

2、插入测试数据

insert into test_t1 values(1,sysdate-1);

insert into test_t1 values(2,sysdate-2);

insert into test_t1 values(3,sysdate-3);

insert into test_t2 values(1,null);

insert into test_t2 values(1,null);

insert into test_t2 values(1,null);

commit;

3、查询T2表中数据,可以发现c_date字段全部为空,select t.*, rowid from test_t2 t;

4、编写sql,修改T2表中的C_date字段的值,等于T1表中的EventTime的值;update test_t2 t2 set t2.c_date = (select eventtime from test_t1 t1 where t1.id = t2.id)

5、再次查询T2表中数据,可以发现c_date字段全部为T1表中对应的数据;select t.*, rowid from test_t2 t;

参考技术A UPDATE t2 SET t2.C_date = (select EventTime from t1 where t1.id = t2.id)

直接用

本回答被提问者采纳
参考技术B UPDATE t2 SET t2.C_date = (select EventTime from t1 where t1.id = t2.id) where exists(select 1 from t1 where t1.id = t2.id)

注重效率追问

更喜欢您的回答,
抱歉已经给了上面的朋友

Oracle中某一表单中的字段里的存放的值为逗号隔开另一表单字段中的多个值,该如何取值

formtable_main_19 :
code wgz06 wgz02
1 001 2014-01-02
2 001,0002 2014-03-04
3 001,0002,00003 2014-05-01
DocDetail:
id docsubject
001 浙江大华合同
0002 唐山万全合同
00003 南京空分合同
Code wgz02 wgz06 id docsubject
1 2014-01-02 001 001 浙江大华合同
2 2014-03-04 001 001 浙江大华合同
2 2014-03-04 001,002 0002 唐山万全合同
3 2014-05-01 001,0002,00003 001 浙江大华合同
3 2014-05-01 001,0002,00003 0002 唐山万全合同
3 2014-05-01 001,0002,00003 00003 南京空分合同

参考技术A create table stuu(code char(4), course_id varchar2(50),cdate date); --创建表
--插入测试数据
insert into stuu(code,course_id,cdate) values('1','1001',sysdate);
insert into stuu(code,course_id,cdate) values('2','1001,1002',sysdate);
insert into stuu(code,course_id,cdate) values('3','1001,1002,1003',sysdate);
create table cours(id char(4),cname varchar2(10));--创建表
--插入测试数据
insert into cours(id,cname) values('1001','语文');
insert into cours(id,cname) values('1002','数学');
insert into cours(id,cname) values('1003','英语');
--先将课程表组合成各种方式的连接,然后再与学生表进行对比查询出想要的数据
select s.code,s.course_id,s.cdate,ss.cname from stuu s,
((select id,cname from cours) union all
(select
a.id||','||b.id id,
a.cname||','||b.cname cname
from cours a,cours b where a.id <> b.id)
union all
(select
a.id||','||b.id||','||c.id id,
a.cname||','||b.cname||','||c.cname cname
from
cours a,
cours b,
cours c
where a.id <> b.id and b.id <> c.id)) ss where s.course_id=ss.id

--已经测试过了,能查询出来的
是否可以解决您的问题?追问

语句中的字段,能换成我给的字段吗

以上是关于oracle数据库中修改表中某字段的值等于另一个表中字段的值的主要内容,如果未能解决你的问题,请参考以下文章

如何批量修改oracle数据库中某一个表中的某一列数据?

查询oracle表中字段中某数据的命令

SQL Server2008 触发器中,根据一个表修改另外一个表

Oracle中某一表单中的字段里的存放的值为逗号隔开另一表单字段中的多个值,该如何取值

用oracle如何查询出一个表中的一个字段内容包含另一个表中的某个字段的值呢

触发器:删除表a中的某行,则修表b中某字段的值。