各位大哥大姐,小弟有个问题,很急,麻烦各位帮帮忙。有两个表,users和tbl_datatrans,表结构如下:
SQL> desc users;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 USER_ID                                   NOT NULL VARCHAR2(8)
 USER_NAME                                 NOT NULL VARCHAR2(10)
 SQL> desc tbl_datatrans;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 SERIAL_NO                                          VARCHAR2(40)
 USER_ID                                            VARCHAR2(8)
 FILE_TYPE                                          VARCHAR2(110)
主要是实现跨表查询后的分页,用存储过程实现的,主要错误是下面这段话,我现在用sql写出来,麻烦大家帮我看看,怎么解决(主要错误在users.user_id )
select * from 
 (
 select A.*,ROWNUM RN 
 from (select * from tbl_datatrans,users) A 
 where tbl_datatrans.user_id=users.user_id and ROWNUM<=2*20 
 )
 where RN>=(20*1+1);
 
 

解决方案 »

  1.   

    select * from 

    select a.*,b.*,rownum rn from tbl_datatrans a,users b where a.user_id=b.user_id and ROWNUM <=2*20 

    where RN>=(20*1+1); 
      

  2.   

    select * from 

    select A.*,ROWNUM RN 
    from (select a.*,b.* from tbl_datatrans a,users b where a.user_id=b.user_id ) A 
    where ROWNUM <=2*20 

    where RN>=(20*1+1);
    有个致命问题
    两个表的USER_ID字段同名冲突,程序里调用就会有异常
      

  3.   

    SQL> desc users;
    名称                                      是否为空? 类型
    ----------------------------------------- -------- ----------------------------
    USER_ID                                  NOT NULL VARCHAR2(8)
    USER_NAME                                NOT NULL VARCHAR2(10)
    SQL> desc tbl_datatrans;
    名称                                      是否为空? 类型
    ----------------------------------------- -------- ----------------------------
    SERIAL_NO                                          VARCHAR2(40)
    USER_ID                                            VARCHAR2(8)
    FILE_TYPE                                          VARCHAR2(110) 两个表的user_id不能相同,如果是两表有关系,必须把tbl_datatrans的user_id设置为外键
      

  4.   

    两个USER_ID字段同名冲突,无法识别,需要用别名
      

  5.   


    select * from 

    select A.*,ROWNUM RN 
    from (select a.user_id,a.user_name,b.serial_no,b.file_type 
            from tbl_datatrans a,users b 
           where a.user_id=b.user_id ) A 
    where ROWNUM <=2*20 

    where RN>=(20*1+1);