首页 > 技术文章 > Oracle粗心大意总结篇

emperorking 2017-10-30 14:25 原文

有时候写sql语句不细心的话,很容易犯大错误,导致你纠结好久,找不到原因,慢慢总结:

错误1:

SELECT * FROM
(
SELECT USER.*, ROWNUM AS CON FROM USER WHERE ROWNUM <= 10 AND to_char(save_log_time,'yyyymmdd')=to_char(sysdate,'yyyymmdd') ORDER BY money desc
)
WHERE CON >=1;

正确1:

SELECT * FROM
(select b.*,ROWNUM rn from (select a.* from USER a WHERE to_char(save_log_time,'yyyymmdd')=to_char(sysdate,'yyyymmdd') order by money desc) b)
WHERE rn BETWEEN 5 AND 10

总结:其实是想把今天的数据拿出来,按照拥有的钱多少排序,然后再取从多少到多少条进行处理,但是一开始没注意,就图个快,嗖嗖嗖的写好语句,结果没注意,后台调试以为代码错误,后来吗,才想起sql写的不对哈。

原因:因为如上错误的语句,直接连取出指定值和排序一起执行,这样是不对的,是取不出正常的数据,所以需要改为正确的语句,先把要用的数据排序全查不出来之后,再去嵌套一层,取出你想要的哪条到哪条,这样搞定。

推荐阅读