我小白自学数据库,关于top使用不明白的地方

小丫么小菜鸡 2018-10-15 09:53:00


update student set age = age + 10 from(select top(1) id from student where age<15 order by age asc) TB_TOP where TB_TOP.id = student.id


大神,我想问select top(1) id from student where age<15 order by age asc 只返回一个id列,那么TB_TOP表中只有一个id列没有其他字段,那这句代码是整么从只有一个id列的TB_TOP表中找到 age的????然后更改age 还有这里的from有什么用?? 本来update关键字修改是不需要from的 这里为什么加了一个from??? 我实在搞不明白 请大神求教
...全文
306 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 版主 2018-10-16
  • 打赏
  • 举报
回复
这个语句达到了预期要求了吗?
这个语句看起来有点怪,这个语句最后只能更新一个id的age值,效果和下边这个一样。
update student set age = age + 10 where TB_TOP.id = (select top(1) id from student where age<15 order by age asc)
吉普赛的歌 2018-10-16
  • 打赏
  • 举报
回复
引用 3 楼 abzzc 的回复:
怎么从只有一个id列的TB_TOP表中找到 age的? -- 打个比方,想给分数最高的学生100元奖金 是不是先找到最高分的学生的学号,就可以发了? where TB_TOP.id = student.id 最后有这一步,相当于两表连接, 查询的虚拟表的结果和更新表就关联上了 更新单表,当然不需要什么FROM 只有虚拟表、表连接等情况更新才需要。 -------------------------------------------------------------------------------------- 虚拟表是不是就是那个TB_TOP?? 更新表是不是那个student,大神我学的视屏里面没有虚拟表和更新表的介绍能不能讲的在仔细点? 还有那个‘’虚拟表的结果和更新表就关联上了‘’是什么意思啊??? 请大神赐教
虚拟表是不是就是那个TB_TOP?? 更新表是不是那个student --是的。 虚拟表的结果和更新表就关联上了 是什么意思啊? where TB_TOP.id = student.id 就是关联。 没什么好说的, 想通了很简单。 自己再多做几个例子就是了。
卖水果的net 版主 2018-10-15
  • 打赏
  • 举报
回复
,那这句代码是整么从只有一个id列的TB_TOP表中找到 age的???? TB_TOP 表(一个虚拟表), 中没有 age 只有id, 后面还有一个条件 where TB_TOP.id = student.id 在前面,要更新的表是 student , 所以 update 后是 student. 然后更改age 还有这里的from有什么用?? 本来update关键字修改是不需要from的 这里为什么加了一个from??? 这个是SQL Server 的特定语法,两张表做关联更新时,要用这种形式的语法 update t set col = x.col , nn = x.nn from t , x where t.id = x.id
小丫么小菜鸡 2018-10-15
  • 打赏
  • 举报
回复
where TB_TOP.id = student.id
最后有这一步,相当于两表连接,
查询的虚拟表的结果和更新表就关联上了

更新单表,当然不需要什么FROM
只有虚拟表、表连接等情况更新才需要。

--------------------------------------------------------------------------------------
虚拟表是不是就是那个TB_TOP?? 更新表是不是那个student,大神我学的视屏里面没有虚拟表和更新表的介绍能不能讲的在仔细点? 还有那个‘’虚拟表的结果和更新表就关联上了‘’是什么意思啊??? 请大神赐教
吉普赛的歌 2018-10-15
  • 打赏
  • 举报
回复
怎么从只有一个id列的TB_TOP表中找到 age的?
-- 打个比方,想给分数最高的学生100元奖金
是不是先找到最高分的学生的学号,就可以发了?

where TB_TOP.id = student.id
最后有这一步,相当于两表连接,
查询的虚拟表的结果和更新表就关联上了

更新单表,当然不需要什么FROM
只有虚拟表、表连接等情况更新才需要。

  • 打赏
  • 举报
回复
update TB_TOP set age=age+10 
from(select top 1 * from student order by desc)TB_TOP

34,594

社区成员

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

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