sql 数据库更新语句的问题 现有一个表 test test下有id 1,2,3,4,5 每个id有对应的value值
答案:2 悬赏:20
解决时间 2021-01-08 14:04
- 提问者网友:放下
- 2021-01-07 18:47
sql 数据库更新语句的问题 现有一个表 test test下有id 1,2,3,4,5 每个id有对应的value值
最佳答案
- 二级知识专家网友:轻熟杀无赦
- 2021-01-07 19:58
sqlserver下
数据如你所给的那个
update test set test_value=t2.test_value from test t1 inner join
(select test_time,SUM(test_value) test_value from test where test_id between 1 and 4 group by test_time) t2
on t1.test_time=t2.test_time and t1.test_id=5执行结果:
其他数据库请另外说明,写法可能有区别。
追问
我本地的表明是 test2 这个不作影响的,在sql develop 以及 PL/SQL中运行都提示的 命令未正确结束,提示都是从光标所在的from处出的问题
追答那你这个就是oracle呗
用这个试试啦
update test t1 set t1.test_value=(select t2.test_value from
(select test_time,SUM(test_value) test_value
from test where test_id between 1 and 4 group by test_time) t2)
where t1.test_time=t2.test_time and t1.test_id=5不同数据库语法不一样,以后提问的时候说明数据库
追问我也明白 t2 这个是给查询出来的和的那个进行表命名的 就不懂为啥会无效的。。。难道是这个t2 只在他的括号里面生效的,在外面大的更新条件中没有定义?
追答不好判断,先把
select test_time,SUM(test_value) test_value
from test where test_id between 1 and 4 group by test_time这句执行以下,看有问题没有?
追问这个执行下来是没问题的,因为我又再次insert了两次 所以数据变成了三倍的了
追答改了一下,这个呢?
update test2 t1 set t1.test_value=(select t2.test_value from
(select test_time,SUM(test_value) test_value
from test2 where test_id between 1 and 4 group by test_time) t2 where t1.test_time=t2.test_time)
where t1.test_id=5;
数据如你所给的那个
update test set test_value=t2.test_value from test t1 inner join
(select test_time,SUM(test_value) test_value from test where test_id between 1 and 4 group by test_time) t2
on t1.test_time=t2.test_time and t1.test_id=5执行结果:
其他数据库请另外说明,写法可能有区别。
追问
我本地的表明是 test2 这个不作影响的,在sql develop 以及 PL/SQL中运行都提示的 命令未正确结束,提示都是从光标所在的from处出的问题
追答那你这个就是oracle呗
用这个试试啦
update test t1 set t1.test_value=(select t2.test_value from
(select test_time,SUM(test_value) test_value
from test where test_id between 1 and 4 group by test_time) t2)
where t1.test_time=t2.test_time and t1.test_id=5不同数据库语法不一样,以后提问的时候说明数据库
追问我也明白 t2 这个是给查询出来的和的那个进行表命名的 就不懂为啥会无效的。。。难道是这个t2 只在他的括号里面生效的,在外面大的更新条件中没有定义?
追答不好判断,先把
select test_time,SUM(test_value) test_value
from test where test_id between 1 and 4 group by test_time这句执行以下,看有问题没有?
追问这个执行下来是没问题的,因为我又再次insert了两次 所以数据变成了三倍的了
追答改了一下,这个呢?
update test2 t1 set t1.test_value=(select t2.test_value from
(select test_time,SUM(test_value) test_value
from test2 where test_id between 1 and 4 group by test_time) t2 where t1.test_time=t2.test_time)
where t1.test_id=5;
全部回答
- 1楼网友:骨子里都是戏
- 2021-01-07 20:23
需求描述不清啊追问
哪里不请了,
就像这个表里面的信息,我需要将testID=5的test_value值改成testID1-4的和
这个求和的图里的sum(test_value) 就是我要替换到原来表test里面的 ID为5的值 通过test_time来匹配的,test_time为1 那么test_value就改成50
我就是一直没改好怎么进行替换。追答select * from #test
update #test set #test.test_value = a.sum_value
from (
select test_time,sum(test_value) sum_value from #test where test_id<>5 group by test_time) a
where #test.test_id = 5 and #test.test_time = a.test_time
哪里不请了,
就像这个表里面的信息,我需要将testID=5的test_value值改成testID1-4的和
这个求和的图里的sum(test_value) 就是我要替换到原来表test里面的 ID为5的值 通过test_time来匹配的,test_time为1 那么test_value就改成50
我就是一直没改好怎么进行替换。追答select * from #test
update #test set #test.test_value = a.sum_value
from (
select test_time,sum(test_value) sum_value from #test where test_id<>5 group by test_time) a
where #test.test_id = 5 and #test.test_time = a.test_time
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯