一条语句可以搞定这个要求吗?

criycee 2017-10-11 11:45:51
table:
id col1 col2
1 2
2 3
3 4
4 5
5 6
6 7

我打算更新col2,id=2的col2=2+3,id=3的col2=3+4,id=4的col2=4+5....注意col2实际是两个col1数据的相加。不知道我描述的是否明白。一定要求是一条语句。谢谢
...全文
347 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
criycee 2017-10-20
  • 打赏
  • 举报
回复
哎,我已经曲线救国了,先新建个中间表,把过程数据写入,再写结果数据,再删除中间表。谢谢大家。
zjcxc 2017-10-12
  • 打赏
  • 举报
回复
子查询确实坑,目前能想到的就这种了
drop table if exists tb;
create table tb(col1 int auto_increment key, col2 int) as select 0 as col2 from information_schema.tables limit 10;
update tb set col2=col1+1;
select * from tb;

update tb a, (
select a.col1, a.col2 - ifnull(b.col2,0) as col2
from(
	select col1, @id1:=@id1+1 as id, @col21:=@col21+col2 as col2 from tb, (select @id1:=0, @col21:=0) x
	order by col1
)a left join(
	select col1, @id:=@id+1 as id, @col2:=@col2+col2 as col2 from tb, (select @id:=0, @col2:=0) x
	order by col1
	) b on a.id = b.id + 3
	) b
set a.col2=b.col2
where a.col1=b.col1;
select * from tb;
ACMAIN_CHM 2017-10-11
  • 打赏
  • 举报
回复
update tableX u, ( select a.id,sum(b.col1) as k from tableX a,tableX b where a.id<=b.id group by a.id) v set u.col2=v.k where u.id=v.id
zjcxc 2017-10-11
  • 打赏
  • 举报
回复
update tb, tb b set tb.col2 = tb.col2+b.col2 where  tb.col1=b.col1+1
ACMAIN_CHM 2017-10-11
  • 打赏
  • 举报
回复
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。 参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382 1. 你的 create table xxx .. 语句 2. 你的 insert into xxx ... 语句 3. 结果是什么样,(并给以简单的算法描述) 4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL) 这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
criycee 2017-10-11
  • 打赏
  • 举报
回复
你sum结果是所有的b.col1<a.col1 limit无效
zjcxc 2017-10-11
  • 打赏
  • 举报
回复
select 验证
criycee 2017-10-11
  • 打赏
  • 举报
回复
不对,结果有误。
zjcxc 2017-10-11
  • 打赏
  • 举报
回复
那就加 limit 限制累加的条数呗

2
3
update tb a, (select col1, (select sum(b.col2) from tb b where b.col1<=a.col1) as col2 from tb a order by a.col1 desc limit 2) b 
set a.col2=b.col2 
where a.col1=b.col1;
criycee 2017-10-11
  • 打赏
  • 举报
回复
select b.c3,b.c4,(select sum(c4) from (select c4 from table where c3<=b.c3 limit 5)a) from table b where b.c3>'2015-01-08' 本来我自己弄的语句是这样的,结果编辑器说b.c3识别不了。郁闷到。
听雨停了 2017-10-11
  • 打赏
  • 举报
回复
引用 4 楼 criycee 的回复:
不好意思哈,没有达到我的要求,如果是下面的这种情况呢?要用到limit。 table: id col1 col2 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 我打算更新col2,id=6的col2=2+3+4+5+6+7,id=7的col2=3+4+5+6+7+8,id=4的col2=4+5+6+7+8+9....注意col2实际是六个col1数据的相加。
你这六个col1完全没有规律啊,怎么知道该取哪六个相加啊
criycee 2017-10-11
  • 打赏
  • 举报
回复
我这例子举的,我都要打我自己了。不是简单的累加,是累加指定数量的col1,我举了两个例子,一个是2个,一个是6个。不是累加条件里面所有的col1
zjcxc 2017-10-11
  • 打赏
  • 举报
回复
直接说你要累加不就行了?
update tb a, (select col1, (select sum(b.col2) from tb b where b.col1<=a.col1) as col2 from tb a) b 
set a.col2=b.col2 
where a.col1=b.col1;
Rotel-刘志东 2017-10-11
  • 打赏
  • 举报
回复
update tb, tb b set tb.col2 = tb.col2+b.col2 where tb.col1=b.col1+1
criycee 2017-10-11
  • 打赏
  • 举报
回复
table: id col1 col2 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 我打算更新col2,id=6的col2=2+3+4+5+6+7,id=7的col2=3+4+5+6+7+8,id=8的col2=4+5+6+7+8+9....注意col2实际是六个col1数据的相加。前面发的说我没有权限修改,很麻烦。
criycee 2017-10-11
  • 打赏
  • 举报
回复
有规律的,假如是更新id=6的col2,那么是取id=1到id=6的col1,假如是id=7的col2,那么是取id=2到id=7的col1
criycee 2017-10-11
  • 打赏
  • 举报
回复
不好意思哈,没有达到我的要求,如果是下面的这种情况呢?要用到limit。 table: id col1 col2 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 我打算更新col2,id=6的col2=2+3+4+5+6+7,id=7的col2=3+4+5+6+7+8,id=4的col2=4+5+6+7+8+9....注意col2实际是六个col1数据的相加。
criycee 2017-10-11
  • 打赏
  • 举报
回复
我这题目做的不好,如果不是两条,col2不是两个col1,而是10个col1相加呢?或者是100个col1相加呢?

56,675

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧