oracle 把一个字段的值更新另一个字段。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 把一个字段的值更新另一个字段。相关的知识,希望对你有一定的参考价值。
如图所示 值1 为主键,值2为原值,值3为修改值,值2 的所有值更新为值3,但是为一对多的关系,请问大神怎么写SQL 数据库为ORACLE,求指点
,,
我是这样写的
-- tab3 只有一个字段,插入的是值2的值
-- tab2 只有2个字段,插入的是值1和修改值3的值
update tab1 a set 值2=(select 值2 from tab2 b where a.值1=b.值1 )
where exists (select 1 from tab2 b where a.值1=b.值1)
and a.值1 in (select a.值1 from tab2 a)
and cop_g_no in (select * from tab3 )
执行后报单行之查询返回多个行,求大神指点。
本人菜鸟才学习数据库,
你报的这个错,基本就是当a.值1=b.值1时,选出来的值2有两个或更多的结果,数据库一蒙圈,就不知道该给你更新哪个了。
如果你更新规则不复杂,可以
update tab1 a set 值2=(select min(值2) from tab2 b where a.值1=b.值1 ) --这个里的值2取最小值,当然也可以max取最大值,如果有其他规则的话就说明where exists (select 1 from tab2 b where a.值1=b.值1)
and a.值1 in (select a.值1 from tab2 a)
and cop_g_no in (select * from tab3 ) 参考技术A 这个挺容易的,使用update语句就可以完成了。例如:
用值2列更新值1列
update 表名 set 值1=值2
也可以加上条件进行过滤
update 表名 set 值1=值2 where 值1=***
也可以对值2进行处理,然后在赋值,比如截取一定的长度
update 表名 set 值1=substr(值2 ,5)where 值1=***
等等,诸如此类。追问
值2 更新值3 ,值1 不动,为主键查询,你的这种方法我试过,好像还行不行
oracle某表的一个字段有多值,怎么把这值变成多行,其它数据为一样
1.新建一个名为TEST表2.向TEST表中添加数据
INSERT INTO TEST(STUDENT,COURSE,SCORE)
select '张三','语文',78 from dual union
select '张三','数学',87 from dual union
select '张三','英语',82 from dual union
select '张三','物理',90 from dual union
select '李四','语文',65 from dual union
select '李四','数学',77 from dual union
select '李四','英语',65 from dual union
select '李四','物理',85 from dual
列转行
方法··1:
select
Student,
sum(decode(Course, '数学', Score)) 数学,
sum(decode(Course, '物理', Score)) 物理,
sum(decode(Course, '英语', Score)) 英语,
sum(decode(Course, '语文', Score)) 语文
from
TEST
group by Student
方法2:
select
Student,
sum(case Course when '数学' then Score else null end) 数学,
sum(case Course when '物理' then Score else null end) 物理,
sum(case Course when '英语' then Score else null end) 英语,
sum(case Course when '语文' then Score else null end) 语文
from
TEST
group by Student 参考技术A 用unpivot或case when
以上是关于oracle 把一个字段的值更新另一个字段。的主要内容,如果未能解决你的问题,请参考以下文章
Mysql如果某个字段值存在则更新另一个字段的值为原值+100,命令应该如何写?