求一条SQL语句, 一个根据一个表中的某个字段来更新另一个表

bizshow 2008-03-24 02:51:44
例如有如下两个表
表topic:
id title
1 你好
2 我不好

表reply:
id topic floor title addTime
1 1 null 回复:你好 <日期时间>
2 2 null 回复:我不好 <日期时间>
3 1 null 回复:你好 <日期时间>
4 2 null 回复:我不好 <日期时间>

我想执行如下操作
select id from topic
然后循环取到的
select floor from reply where topic=<表topic的id> order by addTime desc
然后再根据时间来更新floor, 从1开始
rs("floor")=1
rs.movenext()
rs("floor")=2
然后再继续下一条topic的记录

最后则变成
表reply:
id topic floor title addTime
1 1 1 回复:你好 <日期时间>
2 2 1 回复:我不好 <日期时间>
3 1 2 回复:你好 <日期时间>
4 2 2 回复:我不好 <日期时间>

由于数据量非常大, 通过程序来嵌套循环来更新速度非常慢,
请问能够通过SQL来实现吗? 不好意思, 存储过程还不是很懂...

...全文
541 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bizshow 2008-03-24
  • 打赏
  • 举报
回复
其实我在想, 为什么update要有from子句呢?
update xxx set xxx=(select xxx from xxx)
update xxx set xxx='xxx'
貌似都不需要from子句, 可是上面那条sql没有from却又不能执行
from子句在update语句中到底是有什么作用呢?
-狙击手- 2008-03-24
  • 打赏
  • 举报
回复
不用谢,接分的
bizshow 2008-03-24
  • 打赏
  • 举报
回复
谢谢楼上, 我已经弄好了, 把代码发上来

update ddBbsReply set ddFloor =
(
select count(*)
from ddBbsReply
where ddAttachTopic = ddReply.ddAttachTopic
and ddAddTime < ddReply.ddAddTime
) + 1
from ddBbsReply ddReply


根本就不需要用到Topic这个表, 这样既节省时间, 也免去了很多不必要的查询
是我把问题想得太复杂了... 其实这个用法我早就会了.......为什么我没有想到呢? 这就是差距..... 55555555555

我本来是想这样用程序来实现, 或者使用存储过程, 反正就是想的很复杂就是了, 没有找到这个投机取巧的方法...
今天早上已经更新过一次了, 就是用的下面的程序来实现的, 花了个把小时才执行完
刚刚团然发现自己粗心把 order by 写反了... 就想到看能不能直接用SQL来解决... 55555555555
var rs=createRecordset()
var rs2=createRecordset()
rs.open("select * from ddBbsTopic")
for(var i=0; i<rs.recordcount; i++){
rs2.open("select * from ddBbsReply where ddAttachTopic='"+rs("ddTopicID")+"' order by ddAddTime")
for(var o=0; o<rs2.recordcount; o++){
rs2("ddFloor")=(o+1)
rs2.moveNext()
}
rs2.close
}
recycle(rs2)
recycle(rs)


谢谢楼上的各位达人...
bizshow 2008-03-24
  • 打赏
  • 举报
回复
谢谢楼上,我马上试试
dawugui 2008-03-24
  • 打赏
  • 举报
回复
--明白了,我下面使用的是id<t.id,你换用addtime < t.addtime即可.
create table tb(id int,topic int,[floor] int, title varchar(20), addTime varchar(20))
insert into tb values(1, 1, null , '回复:你好' , '<日期时间>')
insert into tb values(2, 2, null , '回复:我不好', '<日期时间>')
insert into tb values(3, 1, null , '回复:你好' , '<日期时间>')
insert into tb values(4, 2, null , '回复:我不好', '<日期时间>')
go

select id , topic , [floor] = (select count(*) from tb where topic = t.topic and id < t.id) + 1 , title , addtime from tb t

drop table tb

/*
id topic floor title addtime
----------- ----------- ----------- -------------------- --------------------
1 1 1 回复:你好 <日期时间>
2 2 1 回复:我不好 <日期时间>
3 1 2 回复:你好 <日期时间>
4 2 2 回复:我不好 <日期时间>

(所影响的行数为 4 行)
*/
bizshow 2008-03-24
  • 打赏
  • 举报
回复
饿...明白的说吧,
假设现在有一个 帖子 表, 里面有100篇帖子,
有另一个 回复 表, 里面有10000篇回复, 回复有个字段是对应的帖子
现在我就是想, 回复表 里面的每个记录, 根据发表时间 来生成一个 楼层号
楼层号从1开始, 越后面发表的楼层号就越高, 步长为1
回复表里面会有很多个帖子的回复, 所以回复的楼层号并不是惟一的,
例如一个回复的楼层号为1, 他对应第1篇帖子,
但另一个回复的楼层号也为1, 他是第2篇帖子的第1篇回复

可以这样理解, 假设如下表

id, fromTopic, addTime, floor
1 1 1
2 4 2
3 2 3
4 2 4
5 1 5

先按addTime取fromTopic=1的记录, 再根据发布时间顺序生成楼层ID,并更新到floor
然后再取fromTopic=2的记录...
fromTopic=1,2,3,4 这个数字必须是topic表中有的,
也就是说先查询topic表, 帖子的id是惟一的并开始循环
再根据topic的id查询reply表 reply.fromTopic=topic.id
再更新楼层号
然后再继续下一个topic的记录
bizshow 2008-03-24
  • 打赏
  • 举报
回复
哦...原来这个叫做分组排序啊, 谢谢..我看看...
dawugui 2008-03-24
  • 打赏
  • 举报
回复
然后再根据时间来更新floor, 从1开始
------------------------------

对这句话不是很明白,是说按时间从大到小或从小到大,然后根据topic里的ID循环赋值?
jinjazz 2008-03-24
  • 打赏
  • 举报
回复
分组排序的功能参考
http://topic.csdn.net/u/20080324/10/82f22176-5d58-4683-8cab-8732b9b33d69.html
bizshow 2008-03-24
  • 打赏
  • 举报
回复
不知道各位有没有看懂我所说的...
【ACDC微电网的能源管理策略】微电网仿真模型包括光伏发电机、燃料电池系统、超级电容器和直流侧的电池,包括电压源变换器(VSC),用于将微电网的直流侧与交流侧相连接Simulink仿真实现内容概要:本文介绍了一个用于ACDC微电网能源管理策略的Simulink仿真模型,该模型集成了光伏发电机、燃料电池系统、超级电容器和直流侧电池等多种分布式能源,并通过电压源变换器(VSC)实现微电网直流侧与交流侧的连接。文档重点展示了微电网中多能源协调控制与能量管理的仿真方法,涵盖系统建模、能量调度策略设计及动态响应分析,旨在提高微电网运行的稳定性与能效。此外,文中还提及多种相关电力系统仿真案例,突出其在科研与工程实践中的应用价值。; 适合人群:具备一定电力系统、新能源技术及Simulink仿真基础的科研人员、电气工程专业研究生及从事微电网、分布式能源系统设计的工程技术人员。; 使用场景及目标:①用于微电网多能源系统建模与仿真,掌握VSC在交直流互联中的作用;②研究微电网能量管理策略,优化能源调度与系统稳定性;③作为科研项目或毕业设计的技术参考,支撑高水平论文复现与创新研究。; 阅读建议:建议结合Simulink实际操作,逐步构建模型并调试参数,重点关注各能源单元的控制逻辑与VSC的动态响应特性,同时可参考文中提到的优化算法与控制策略进行扩展研究。

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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