oracle怎么实现多表 连接查询 并分页。。。

原查询条件selectu.userid,u.userid,u.loginName,t.contentfromuserinfou,twittertwhereu.userid... 原查询条件select u.userid,u.userid,u.loginName,t.content from userinfo u,twitter t where u.userid=t.userid and loginname like '%java%'

这样写的不可以
select * from (select rownum as r,u.userid,u.userid,u.loginName,t.content from userinfo u,twitter t where u.userid=t.userid and loginname like '%java%')t where rownum>2 and rownum<4;

求各位大侠帮帮忙。。。。 谢谢
展开
 我来答
青鸟中关村专家
推荐于2017-10-02 · 知道合伙人软件行家
青鸟中关村专家
知道合伙人软件行家
采纳数:1734 获赞数:8440
就职于北大青鸟中关村,自2004年踏入北大青鸟这个行业,已经有11年工作经验和8年的培训经验,寓教于乐

向TA提问 私信TA
展开全部

oracle使用rownum伪列可以实现分页,三表连接分页示例代码如下:

select * from (select rownum r,k.kch,k.kcm,cj.cj,x.xh,x.xm from KCB  k,CJB  cj,XSB  x where k.kch   = cj.kch and cj.xh = x.xh and rownum<=10) where r>0

特别注意这样外层查询时由于内层查询的字段有重复列名,所以内层查询最后不要用*。取完每一个表字段,这样很容易报错(“无效字段”)

光亮天空
2011-09-24 · TA获得超过669个赞
知道小有建树答主
回答量:269
采纳率:0%
帮助的人:161万
展开全部
多表连接最好一次从数据库中取出,在前台分页,否则每次做连接很耗费资源的。
从技术上你的写法也是对的:
select * from (select rownum as r,u.userid,u.userid,u.loginName,t.content from userinfo u,twitter t where u.userid=t.userid and loginname like '%java%')t where rownum<= currentPage*pageSize and rownum<= (currentPage+1)*pageSize
你试下。
追问
之前我 也 这么写过 。。。  但是就是报 select * from(....); 里的这个* 未定义 错误。。。。

试了好多种方法 都是这一点错误 从理论上来说 这样写 是没问题的啊????
追答
哦,那你把rownum as r放到最外层看下,可能是这个的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sxdtgsh
2011-09-24 · TA获得超过2221个赞
知道小有建树答主
回答量:913
采纳率:75%
帮助的人:802万
展开全部
select * from (select rownum as r,u.userid,u.userid,u.loginName,t.content from userinfo u,twitter t where u.userid=t.userid and loginname like '%java%' and rownum <4 )t where r > 2;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户30677
2011-09-24 · TA获得超过275个赞
知道小有建树答主
回答量:1447
采纳率:0%
帮助的人:641万
展开全部
实际效果要看Oracle 优化以后的
不过,从理论上来说,2好一些,因为提前做了关联取的集合较小
Oracle是建议先将小集合进行关联的,然后在针对rowid进行排序
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
清心又谦恭丶布丁9
2011-09-23 · TA获得超过6604个赞
知道小有建树答主
回答量:1247
采纳率:100%
帮助的人:1869万
展开全部
楼主是不是可以考虑写个视图。然后根据视图去分页。我觉得这样会好些哦
更多追问追答
追问
我 现在 对 oracle 数据库还 不是太熟悉 啊! 

我这么 写 select * from (select rownum rn , a.* from (select u.userid,u.userid,u.loginName,t.content from userinfo u,twitter t where u.userid=t.userid and loginname like '%java%')a where rownum 8

怎么会报a.* 有错呢 郁闷啊
追答
你把这句话
select rownum rn , a.* from (select u.userid,u.userid,u.loginName,t.content from userinfo u,twitter t where u.userid=t.userid and loginname like '%java%
单独扔数据库看会不会报错。应该是这句的问题了。
报的什么错哦????
我要睡觉了。。。你先折腾折腾吧,也早点睡
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式