网站更换备案吗,个人网站论文摘要,dw怎么把设计网页显示出来,免费软件app全免费ROWNUM 使用问题记录(2023-08-17)
Oracle 版本#xff1a; 19.0.0.0.0 Enterprise现象#xff1a;今天在项目遇到一个问题#xff0c;测试人员反馈前一天能看到的数据今天看不到了
用表格举例#xff0c;这是前一天看到的数据#xff0c;有9、7、1 这几个数量信息
日期…ROWNUM 使用问题记录(2023-08-17)
Oracle 版本 19.0.0.0.0 Enterprise现象今天在项目遇到一个问题测试人员反馈前一天能看到的数据今天看不到了
用表格举例这是前一天看到的数据有9、7、1 这几个数量信息
日期ID数量XXX19XXX27XXX31
今天测试反馈 9 没了但是库里是有的
ID数量XXX27XXX31XXX41
排查问题我跟踪代码把SQL拿出来到数据库执行确实没查出来数值 9 的数据
# SQL 如下昨天能显示的时候ROWNUM 为20
SELECT dt_date,id,num FROM T WHERE dt_date2301 and dt_date2307 AND ROWNUM 10ORDER BY num DESC比较奇怪的是 ROWNUM 20 的时候能查出来为9 的那一条数据其实即使查出来 9 数据结果也不对因为还有一条数值为 12 的 先是改回 ROWNUM 20 确实能看到数值为9 的那一条数据了但是还有一个数值12的没有查出来还是不对通过回忆MYSQL的写法结合查询结果现象推测Oracle SQL 执行顺序与MYSQL不一样 在MYSQL中上述SQL执行结果是正常的会取出数值为9 、12 的数据MySql 会先执行Order By 操作然后执行 Limit 取值并且 Limit 会在Where 条件后执行在Oracle中就不行了这里使用到了ROWNUM而 ROWNUM 是写在 Where 条件中的SQL 执行过程与Mysql 就产生了差异根据现象得知Oracle先得到结果然后生成虚拟的ROWNUM再然后执行WHERE条件最后 Orader By 操作这样就出现了与测试反馈的一样的结果取值在前排序在后所以取出来的值如果刚巧数据满足要求时就不容易看出来问题 解决问题通过包装一层SQL来处理这个问题先排序再取值
# 通过嵌套SQL查询解决
SELECT * FROM (SELECT dt_date,id,num FROM T WHERE dt_date2301 and dt_date2307ORDER BY num DESC
) A
WHERE ROWNUM10本次问题根因
太久(十多年了)没有使用过Oracle 了特性啥的早忘光光了不然应该不会犯这个错误SQL 是老师提供的我也没想那么多直接用了估计老师也可能也没想到吧