这个sql是怎么了

nitaiyoucala 2017-05-05 09:42:49
表数据如下:

我用select top(1) * from Table_1 order by n asc 查询显示的结果为什么是10565 2222 0
不应该是10561 1111 0 吗?
...全文
262 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2017-05-05
  • 打赏
  • 举报
回复
不要相信 order by 之外的“顺序”。 排序本身就是要消耗时间的, 你不要求当然就不排序了。
顺势而为1 2017-05-05
  • 打赏
  • 举报
回复
是的,
  • 打赏
  • 举报
回复
order by n,id ???
顺势而为1 2017-05-05
  • 打赏
  • 举报
回复
想按记录加入表中的先后顺序显示的话, 只有加多一列自动增值的ID了.
卖水果的net 2017-05-05
  • 打赏
  • 举报
回复
你看到的第一个,和系统认为的第一个,不是一回事儿。
nitaiyoucala 2017-05-05
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
你的 n 是相同的,所以这个结果是不稳定的,今天可能是这行,过几天你对这张表大量写数据、删数据、收缩表,再查询就是另一行了。
我想当n数量是一样的时候永远取第一个怎么来啊?
二月十六 2017-05-05
  • 打赏
  • 举报
回复
把n改成1、2、3试试楼主就知道了
卖水果的net 2017-05-05
  • 打赏
  • 举报
回复
你的 n 是相同的,所以这个结果是不稳定的,今天可能是这行,过几天你对这张表大量写数据、删数据、收缩表,再查询就是另一行了。
逍遥清风_Frank 2017-05-05
  • 打赏
  • 举报
回复
create table Table_1
(
id int,
v varchar(128),
n int
)
insert into Table_1
select 10561,'1111',0 union all
select 10565,'2222',0 union all
select 10572,'3333',0
go

;with cte as
(
select
* ,
row_number() over(order by n) as num
from Table_1
)
select id,v,n from cte where num=1

11,849

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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