您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Oracle两个表连接的分段查询

2024/3/6 6:18:32发布20次查看
select * from ( select rownum field_byname,d.* from (select b.*,c.loginaccount from jitums.tb_readers b, jitums.tb_rd_a
select * from ( select rownum field_byname,d.* from  (select b.*,c.loginaccount from jitums.tb_readers b, jitums.tb_rd_account c where b.reader_id= c.reader_id) d  where rownum = 1;
 select * from ( select rownum field_byname,b.* from ( select c.name cname,d.loginaccount,e.name  from jitums.tb_readers c ,jitums.tb_rd_account d,jitums.tb_rd_type e where  c.rdtypecode= e.rdtypecode and c.reader_id= d.reader_id ) b where rownum 0 
三个表连接,其中两个表里有一列名字相同,得重命名c.name cnam
一般在项目开发的时候会经常用到,大批量数据不可能一次性加载到内存,这就会用到分页,分页就用到范围我是做.net的微软跟随者(呵呵,不要有分歧哦!java和.net在这个行业的口舌之战还未停休),时候也用oracle你说的这个范围查询在sql server里可能要好实现些,因为它有个top关键字.这个就不说了,,主要是说oracle.oracle 有个rownum关键字它的功能等同于sqlserver的top,rownum返回的是table的内部行号,查寻有多少条记录,它的行号就会从1一直递增到最后一条记录,而且这个递增是实时的.所以我们不能用常规的思想去查询.
例如:select * from tablename where rownum >=1000 and rownum select rownum field_byname,table_byname.* from tablename table_byname然后嵌入到下面括号
select * from ( select rownum field_byname,table_byname.* from tablename table_byname ) a  where a.field_byname >= 1000 and a.field_byname 但效率不高,它查询了所有数据,然后从所有数据查询到1000到10000之间的行,根据笛卡尔积原理,冗余相当大.还有种方法对上面sql进行了改进,效率高很多
select * from ( select rownum field_byname,table_byname.* from tablename table_byname  
where rownum = 1000
还可以写为:
select * from ( select a.*, rownum rn from (select * from jitums.tb_readers ) a where rownum 0
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product