left join ,查询结果集排序后取第一条数据
来源:互联网 发布:种草 网络语言 英文 编辑:程序博客网 时间:2024/04/27 19:54
最近改一个问题,改sql语句,大概意思是 左关联 A 表 和 B表, 按照条件查询后对查询结果排序后结果集的第一条数据。
原始的SQL:
select a.id from A a left join B b on a.id = b. id
where a.userid = 'name'
and rownum = 1
order by a.p;
当时的问题是,如果查询的结果里有 多条数据,这个存储过程最后 返回的结果不正确,不是排序后的第一条数据。
调试的方法:用调用存储过程是的参数直接在数据库中直接执行该语句,看是否是存储过程中的SQL写的有问题,但是直接执行SQL的结果却是正确的!
当时就很郁闷,同样的参数,页面调用存储过程和在数据库中直接执行SQL的语句怎么结果不一样呢。再看这个SQL写的也没问题啊。
很长时间过去了,还没定位出来,我一直在纠结怎么两种方式的运行结果不一致。最后突然想到,这个原来的开发这样写的目的就是想对查询结果先排序再取第一条数据,终于明白了。
SQL应该这样写:
select c.id from (select a.id from A a left join B b on a.id = b. id
where a.userid = 't1'
order by a.p) c where and rownum = 1;
最终问题解决了。总结:对于维护项目,常常改别人的代码,而且有时候根本就不熟悉业务逻辑,所以常常是很简单的问题定位起来很困难,所以某一段代码的目的很重要,也就是这段程序要实现什么功能。转换思路看问题。
0 0
- left join ,查询结果集排序后取第一条数据
- 取排序后的第一条数据
- mysql排序后取第一条数据
- oracle left join 查询第一条记录
- 各种数据库取查询结果的第一条数据
- left join连接2个查询结果集的用法
- Oracle取查询结果第一条记录SQL
- sql两个查询结果left join
- Oracle left join 查询 结果偏少
- oracle排序后获取第一条数据
- 排序后名字相同取第一条的sql文
- oracle 分组后取每组第一条数据
- oracle分组后取每组第一条数据
- 取数据库中分组后每一个人的第一条数据
- oracle分组后取每组第一条数据
- oracle 分组后取每组第一条数据
- oracle 分组后取每组第一条数据
- oracle 分组后取每组第一条数据
- 获取以太网广播地址
- eclipse配置jetty插件
- 【笔记】Android studio 重置 DDMS面板布局
- 关于ListActivity的创建
- 二维码生成与解析代码实现
- left join ,查询结果集排序后取第一条数据
- 在整型数组里找唯一的一个和其它元素不同的整数
- 小马哥---高仿三星n9100刷机 单双卡主板外观机型对比,分n910f n9100 n910c 拆机主板详图
- smali文件语法参考
- debian旧光盘下载地址
- Android性能优化典范(一)
- PHP裁剪图片插件记录
- Caffe+Ubuntu 14.04 + Cuda6.5 新手安装记录
- 获取以太网子网掩码