如何写 oracle联合查询分页的sql语句

wssmax 2006-03-21 04:58:32
oracle分页sql的书写:

SELECT * FROM (SELECT A.*, ROWNUM r FROM (SELECT * FROM conferencenotice ) A WHERE ROWNUM <=20) WHERE (R > 0)

但是两个表联合后,这样写就不行了。
SELECT * FROM (SELECT A.*, ROWNUM r FROM (SELECT * FROM conferenceplan,conferencenotice WHERE conferenceplan.conferenceid=conferencenotice.conferenceid) A WHERE ROWNUM <=20) WHERE (R > 0)

大概原因我们已经找到就是两个表有相同的列。
因为我要写成通用的,所以不能自定义列。
...全文
460 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcdwcd 2006-04-07
  • 打赏
  • 举报
回复
在Oracle下ROWNUM函数是对查询结果按照顺序分配自增行序号,所以很多人都利用这个特点进行分页操作,即rownum between 30 and 60,这种限制返回行数的小窍门在普通情况下都很正常,但如果要对返回结果在进行排序就变得乱套了。还是用MINUS这个减法集合运算符,MINUS是找到两个给定的数据集合之间的差异,即找到一个数据集合,该集合的数据是仅存在于前一个数据集而后一个数据集中不存在的,相当于集合1-集合2,利用此函数,我可以让集合1返回的是前50条数据,而集合2返回的是前30条,50-30就相当于返回的第30-50的数据。自己在网上搜一下吧!
wssmax 2006-03-22
  • 打赏
  • 举报
回复
错误信息:为明确定义列。
用这个 是一样的conferenceplan.*,conferencenotice.*,
因为他们有相同的列。
prcgolf 2006-03-22
  • 打赏
  • 举报
回复
up
yxh1214 2006-03-22
  • 打赏
  • 举报
回复
建议,直接使用rownum 虚列,数据响应较快.时间为.09S,
而利用分析函数需要2S..51recoder
wffffc 2006-03-21
  • 打赏
  • 举报
回复
oracle 数据分页查询

1. 最好还是利用分析函数
row_number() over ( partition by col1 order by col2 )

比如想取出100-150条记录,按照tname排序

select tname,tabtype from (
select tname,tabtype,row_number() over ( order by tname ) rn from tab
)
where rn between 100 and 150;

2. 直接使用rownum 虚列
select tname,tabtype from (
select tname,tabtype,rownum rn from tab where rownum <= 150
)
where rn >= 100;
使用序列不能基于整个记录集合进行排序,如果指定了order by子句,排序的的是选出来的记录集的排序.

bzszp 2006-03-21
  • 打赏
  • 举报
回复
错误信息是什么?
try:
SELECT * FROM (SELECT conferenceplan.*,conferencenotice.*,rownum rnum FROM conferenceplan ,conferencenotice WHERE conferenceplan.conferenceid=conferencenotice.conferenceid WHERE ROWNUM <=20) t WHERE (rnum > 0)

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧