问个ORACLE中SQL语句写法,取表第N条记录的问题
请问如何能表中取到rownum为2的记录,有一个关联A表中有3条记录idname1王1李1杨B表需要跟A关联select(selectnamefromawherea.id...
请问如何能表中取到rownum为2的记录,有一个关联A表中有3条记录
id name
1 王
1 李
1 杨
B表需要跟A关联
select
(select name from a where a.id = b.id and rownum=1) as name1,
(select name from a where a.id = b.id and rownum=2) as name2,
(select name from a where a.id = b.id and rownum=3) as name3
from b
where .......
因为只需要B表中的每条记录,因此我想不做全表关联,当我想这样写的时候发现只能取到a中的rownum=1的记录,rownum=2、3的取不出,请问这是什么问题,有没有可以解决的办法,谢谢 展开
id name
1 王
1 李
1 杨
B表需要跟A关联
select
(select name from a where a.id = b.id and rownum=1) as name1,
(select name from a where a.id = b.id and rownum=2) as name2,
(select name from a where a.id = b.id and rownum=3) as name3
from b
where .......
因为只需要B表中的每条记录,因此我想不做全表关联,当我想这样写的时候发现只能取到a中的rownum=1的记录,rownum=2、3的取不出,请问这是什么问题,有没有可以解决的办法,谢谢 展开
3个回答
展开全部
学MSSQLSERVER正准备学oracle的表示,你A表里的ID是相同的.. where a.id = b.id 表内无聚集索引数据存放可能是堆存放无序的,将有可能取ID相同的时候排序数据取错了数据...你权且把A表ID换下..不让其相同试试.
---或则直接把 where a.id = b.id 去掉试试,反正就只有一列相同ID
---或则直接把 where a.id = b.id 去掉试试,反正就只有一列相同ID
追问
请问,我现在直接取A表
select * from a where rownum = 2
这个时候也是没有数据的,难道因为表中的 rownum 无效吗,rownum = 1时可以取出
id name
1 王
怎样才能实现3个条记录显示在3个字段上
追答
你的方法从语法上来说本来就是没错的 每取一条数据列值作为列值显示;我记得Oracle取N条记录确实是用rownum;
你试试:
select * from a where rownum<4看能否把全部数据取出来.
展开全部
不能对ROWNUM 使用>(大于或等于1 的数值)、>=(大于1 的数值)、=(大于1 的数值),否则无结果
这是因为:
1、ROWNUM 是伪列,必须要要有返回结果后,每条返回记录就会对应产生一个ROWNUM
数值;
2、返回结果记录的ROWNUM 是从1 开始排序的,因此第一条始终是1;
这样,当查询到第一条记录时,该记录的ROWNUM 为1,但条件要求ROWNUM>1,因此不
符合,继续查询下一条;因为前面没有符合要求的记录,因此下一条记录过来后,其
ROWNUM 还是为1,如此循环,就不会产生结果。上述查询可以通过子查询来替代:
select * from(select rownum no ,id,name from a) where no=2
这是因为:
1、ROWNUM 是伪列,必须要要有返回结果后,每条返回记录就会对应产生一个ROWNUM
数值;
2、返回结果记录的ROWNUM 是从1 开始排序的,因此第一条始终是1;
这样,当查询到第一条记录时,该记录的ROWNUM 为1,但条件要求ROWNUM>1,因此不
符合,继续查询下一条;因为前面没有符合要求的记录,因此下一条记录过来后,其
ROWNUM 还是为1,如此循环,就不会产生结果。上述查询可以通过子查询来替代:
select * from(select rownum no ,id,name from a) where no=2
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
rownum是从第一行开始查询的伪列,是返回的总行数,不能直接用rownum=2你可以通过子查询实现
select * from(select rownum no ,id,name from a) where no=2
select * from(select rownum no ,id,name from a) where no=2
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询