问个ORACLE中SQL语句写法,取表第N条记录的问题

[复制链接]
查看11 | 回复5 | 2011-9-26 12:19:49 | 显示全部楼层 |阅读模式
请问如何能表中取到rownum为2的记录,有一个关联A表中有3条记录idname1王1李1杨B表需要跟A关联select(selectnamefromawherea.id=b.idandrownum=1)asname1,(selectnamefromawherea.id=b.idandrownum=2)asname2,(selectnamefromawherea.id=b.idandrownum=3)asname3frombwhere.......因为只需要B表中的每条记录,因此我想不做全表关联,当我想这样写的时候发现只能取到a中的rownum=1的记录,rownum=2、3的取不出,请问这是什么问题,有没有可以解决的办法,谢谢
回复

使用道具 举报

千问 | 2011-9-26 12:19:49 | 显示全部楼层
rownum是从第一行开始查询的伪列,是返回的总行数,不能直接用rownum=2你可以通过子查询实现select*from(selectrownumno,id,namefroma)whereno=2
回复

使用道具 举报

千问 | 2011-9-26 12:19:49 | 显示全部楼层
学MSSQLSERVER正准备学oracle的表示,你A表里的ID是相同的..wherea.id=b.id表内无聚集索引数据存放可能是堆存放无序的,将有可能取ID相同的时候排序数据取错了数据...你权且把A表ID换下..不让其相同试试.---或则直接把wherea.id=b.id去掉试试,反正就只有一列相同ID追问请问,我现在直接取A表select*fromawhererownum=2这个时候也是没有数据的,难道因为表中的rownum无效吗,rownum=1时可以取出idname1王怎样才能实现3个条记录显示在3个字段上
回复

使用道具 举报

千问 | 2011-9-26 12:19:49 | 显示全部楼层
你的方法从语法上来说本来就是没错的每取一条数据列值作为列值显示;我记得Oracle取N条记录确实是用rownum;你试试:select*fromawhererownum4看能否把全部数据取出来.
回复

使用道具 举报

千问 | 2011-9-26 12:19:49 | 显示全部楼层
不能对ROWNUM使用(大于或等于1的数值)、=(大于1的数值)、=(大于1的数值),否则无结果这是因为:1、ROWNUM是伪列,必须要要有返回结果后,每条返回记录就会对应产生一个ROWNUM数值;2、返回结果记录的ROWNUM是从1开始排序的,因此第一条始终是1;这样,当查询到第一条记录时,该记录的ROWNUM为1,但条件要求ROWNUM1,因此不符合,继续查询下一条;因为前面没有符合要求的记录,因此下一条记录过来后,其ROWNUM还是为1,如此循环,就不会产生结果。上述查询可以通过子查询来替代:select*from(selectrownumno,id,namefroma)whereno=2
回复

使用道具 举报

千问 | 2011-9-26 12:19:49 | 显示全部楼层
你提到的这个问题我以前遇到过,后来解决了。建议你去北风网看一下他们推出的:Oracle11g最佳培训教程(王二暖Oracle11g教室\\10年经验毫无保留)这个教程参考资料:ww.baidu.com/。http://www.ibeifeng.com/goods.php?id=156。HTMC
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行