ITPUB论坛-中国最专业的IT技术社区

 
 注册
热搜:
查看: 965|回复: 9

ROWNUM=1是返回结果集的任意一行吗

[复制链接]
论坛徽章:
7
优秀写手
日期:2013-12-18 09:29:08问答徽章
日期:2014-02-07 23:48:392014年新春福章
日期:2014-02-18 16:50:09马上有车
日期:2014-02-18 16:50:09马上有钱
日期:2014-10-26 21:51:11暖羊羊
日期:2015-03-04 14:54:572015年新春福章
日期:2015-03-06 11:59:47
跳转到指定楼层
1#
发表于 2017-11-26 20:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大神,看到一个SQL里面标量子查询用了ROWNUM = 1,不加 ROWNUM = 1时,有多条记录并且记录不一样,

问题是,加了ROWNUM = 1,多次执行的话,这个ROWNUM = 1可能返回不一样的记录吧。
认证徽章
论坛徽章:
5
ITPUB十周年纪念徽章
日期:2011-11-01 16:26:29鲜花蛋
日期:2011-12-20 16:06:45娜美
日期:2017-12-15 13:56:33技术图书徽章
日期:2017-11-17 09:13:02妮可·罗宾
日期:2017-11-17 10:43:23
2#
发表于 2017-11-27 08:16 | 只看该作者
如果子查詢中的結果集涉及數據一直不變,table也不做類似 move操作話,rownum =1 返回值估計不會變。
通常rownum 順序遵循:
1. 全表掃描時,按table segment datafile id, block id 順序
2. 索引掃描時,按鍵值順序

之前案例DB在做expdp/impdp 到新庫時rownum出過問題,在table move 操作后也出過問題。
如果要求不變,使用時最好加上其它限制條件,供參考

使用道具 举报

回复
论坛徽章:
394
阿斯顿马丁
日期:2014-01-03 13:53:522014年世界杯参赛球队:喀麦隆
日期:2014-07-11 12:10:53马上有对象
日期:2014-04-09 16:19:542014年世界杯参赛球队: 洪都拉斯
日期:2014-06-25 08:25:55itpub13周年纪念徽章
日期:2014-09-28 10:55:55itpub13周年纪念徽章
日期:2014-10-01 15:27:22itpub13周年纪念徽章
日期:2014-10-09 12:04:18马上有钱
日期:2014-10-14 21:37:37马上有钱
日期:2015-01-22 00:39:13喜羊羊
日期:2015-02-20 22:26:07
3#
发表于 2017-11-27 10:04 | 只看该作者
等newkid批驳

使用道具 举报

回复
认证徽章
论坛徽章:
15
ERP板块每日发贴之星
日期:2007-08-24 01:03:56狮子座
日期:2015-09-10 09:07:23处女座
日期:2015-09-11 10:28:03ITPUB14周年纪念章
日期:2015-10-26 17:23:44喜羊羊
日期:2015-06-24 14:33:00慢羊羊
日期:2015-06-15 14:22:442015年新春福章
日期:2015-03-12 17:22:46优秀写手
日期:2014-11-20 06:00:13茶鸡蛋
日期:2013-06-29 22:37:49蛋疼蛋
日期:2013-04-27 10:34:16
4#
发表于 2017-11-27 13:58 | 只看该作者
rownum总是为满足条件的记录从1开始设序号,也就是说,取你满足你查询结果的第一行记录。

使用道具 举报

回复
论坛徽章:
4
秀才
日期:2017-08-11 15:38:46秀才
日期:2017-09-08 11:09:50秀才
日期:2017-09-25 15:10:28秀才
日期:2017-09-25 15:10:28
5#
发表于 2017-11-27 14:27 | 只看该作者
这样的写法未经过排序只是为了 避免返回多行报错的敷衍写法  我觉得是错的

不经过排序取的rownum oracle并不能保证每次返回的记录一样 这样的做法非常危险

使用道具 举报

回复
论坛徽章:
7
优秀写手
日期:2013-12-18 09:29:08问答徽章
日期:2014-02-07 23:48:392014年新春福章
日期:2014-02-18 16:50:09马上有车
日期:2014-02-18 16:50:09马上有钱
日期:2014-10-26 21:51:11暖羊羊
日期:2015-03-04 14:54:572015年新春福章
日期:2015-03-06 11:59:47
6#
 楼主| 发表于 2017-11-27 15:47 | 只看该作者
guocun09 发表于 2017-11-27 08:16
如果子查詢中的結果集涉及數據一直不變,table也不做類似 move操作話,rownum =1 返回值估計不會變。
通常 ...

多谢大神。

使用道具 举报

回复
认证徽章
论坛徽章:
5
ITPUB十周年纪念徽章
日期:2011-11-01 16:26:29鲜花蛋
日期:2011-12-20 16:06:45娜美
日期:2017-12-15 13:56:33技术图书徽章
日期:2017-11-17 09:13:02妮可·罗宾
日期:2017-11-17 10:43:23
7#
发表于 2017-11-27 17:18 | 只看该作者

以上為我之前學習及測試的經驗,還請真正的專家指正

使用道具 举报

回复
认证徽章
论坛徽章:
168
SQL数据库编程大师
日期:2016-01-13 10:30:43SQL极客
日期:2013-12-09 14:13:35SQL大赛参与纪念
日期:2013-12-06 14:03:45最佳人气徽章
日期:2015-03-19 09:44:03现任管理团队成员
日期:2015-08-26 02:10:00秀才
日期:2015-07-28 09:12:12举人
日期:2015-07-13 15:30:15进士
日期:2015-07-28 09:12:58探花
日期:2015-07-28 09:12:58榜眼
日期:2015-08-18 09:48:03
8#
发表于 2017-11-27 17:44 | 只看该作者
理论上没有order by的rownum=1,数据库给你返回任意一条数据都是对的。

使用道具 举报

回复
论坛徽章:
480
榜眼
日期:2015-09-09 10:34:21秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12状元
日期:2015-11-23 10:04:09举人
日期:2015-11-23 10:04:09
9#
发表于 2017-11-27 22:43 | 只看该作者
你是“看到”了,我们看不到,说什么都是瞎猜。
如果作者的意图是“任意一条”,那么在去掉ROWNUM=1之后所有返回结果应该是相同的,而你说不是这种情况。
如果作者的意图是“判断数据是否存在”,而不在乎数据是什么,那么一般会写SELECT 1, SELECT COUNT(*) FROM...WHERE ...AND ROWNUM=1。
如果作者的意图是“取最...的第一条”,那么就必须有排序,而且排序要发生在里层,外面才能用ROWNUM=1。标量子查询很少超过两层的,ORACLE的很多版本也不支持。
如果作者的意图是“取最...的第一条”,而且把ORDER BY和ROWNUM=1放在同一层,那么就是个BUG(很多人常犯的错误)。如果忘了写ORDER BY,那么这人就没长脑子。
所以,你不把SQL贴出来,别人就只好瞎猜而且白费口舌。

使用道具 举报

回复
认证徽章
论坛徽章:
15
ERP板块每日发贴之星
日期:2007-08-24 01:03:56狮子座
日期:2015-09-10 09:07:23处女座
日期:2015-09-11 10:28:03ITPUB14周年纪念章
日期:2015-10-26 17:23:44喜羊羊
日期:2015-06-24 14:33:00慢羊羊
日期:2015-06-15 14:22:442015年新春福章
日期:2015-03-12 17:22:46优秀写手
日期:2014-11-20 06:00:13茶鸡蛋
日期:2013-06-29 22:37:49蛋疼蛋
日期:2013-04-27 10:34:16
10#
发表于 2017-11-28 17:15 | 只看该作者
newkid 发表于 2017-11-27 22:43
你是“看到”了,我们看不到,说什么都是瞎猜。
如果作者的意图是“任意一条”,那么在去掉ROWNUM=1之后所 ...

解说的很详细。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 |
  | | |
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表