现在有三个表:
单位信息表A(单位内码,单位外码,单位名称);
项目信息表B(项目内码,项目外码,项目名称);
项目挂接信息表C(单位内码,项目内码)。现在用户只能从页面通过单位外码或者单位名称经行模糊查询出项目挂接信息,要求以每页显示10条单位外码、名称、项目外码、名称等信息。我现在的方法就是通过用户输入的信息模糊查询出所有单位,然后循环查出和单位有挂接的所有项目内码,然后再循环查出项目的相关信息。虽然结果是出来了,但是这样的速度非常慢。本人对ORCALE的操作也是涉入不是很多,所以在这里请求帮助,怎么来优化一下,谢谢!(差点忘记了,不能用存储过程,需求单位不让。)

解决方案 »

  1.   

    多对多查询啊,如果是hibernate应该不麻烦的吧
      

  2.   

    我使用的是JAVABEAN+JSP+SERVLET。
      

  3.   

    创建个视图先select a.dwnm,a.dwwm,a.dwmc,b.xmnm,b.xmwm,b.xmmc from a,b,c where a.dwnm = c.dwnm and b.xmnm = c.xmnm然后你再分页
      

  4.   

    select A.DWBM,A.DWMC,B.XMBM,B.XMMC,B.SFSX,B.SFXX from A,B,C where A.DWBM like '"+DWBM+"' and A.DWMC like '"+DWMC+"' and C.DWNM = A.DWNM and B.XMNM = C.XMNM不知道我这么写哪里有问题?返回的数据是0?
      

  5.   

    SELECT *
      FROM (SELECT A.D_WCODE, A.D_NAME, B.P_WCODE, B.P_NAME
              FROM DEPART A, PROJECT B, PROINFO C
             WHERE A.D_NCODE = C.D_NCODE
               AND C.P_NCODE = B.P_NCODE
               AND A.D_NAME LIKE '%3%'
               AND A.D_WCODE LIKE '%1%')
     WHERE ROWNUM >= 1 --分页变量
       AND ROWNUM <= 10 --分页变量
      

  6.   

    A表 单位信息表(DWNM"内码",DWBM“外码”,DWMC“名称”)
    B表 项目信息表(XMNM “内码”,XMBM“外码”,XMMC“名称”,SFXX “下线”,SFSX“上线”)
    C表 单位项目挂接信息表(DWNM“单位内码”,XMNM “项目内码”)要求显示的结果:
      通过用户输入单位外码DWBM或单位名称DWMC模糊查询出单位外码、单位名称、项目外码、项目名称、上线、下线。
      

  7.   

    修正下:SELECT *
      FROM (SELECT ROWNUM RN, A.D_WCODE, A.D_NAME, B.P_WCODE, B.P_NAME
              FROM DEPART A, PROJECT B, PROINFO C
             WHERE A.D_NCODE = C.D_NCODE
               AND C.P_NCODE = B.P_NCODE
               AND A.D_NAME LIKE '%3%'
               AND A.D_WCODE LIKE '%1%')
     WHERE RN >= 1 --分页变量
       AND RN <= 10 --分页变量
      

  8.   

    uyerp兄的方法和我自己的好像一样,返回的结果还是0。
      

  9.   

    select A.DWBM,A.DWMC,B.XMBM,B.XMMC,B.SFXX,B.SFSX
    from A,B,C
    where (A.DWBM like 'DWBM' or A.DWMC like 'DWMC') 
    and A.DWNM=C.DWNM and B.XMNM=C.XMNM;
      

  10.   

    C表就是把A和B表联系起来的中间表。
      

  11.   

    select *
      from (select rownum r,
                   A.DWBM,
                   A.DWNM,
                   A.DWMC,
                   B.XMBM,
                   B.XMMC,
                   B.SFXX,
                   B.SFSX
              from a, b, c
             where a.DWNM = c.DWNM
               and c.XMNM = b.XMNM
               and regexp_like('aa', a.DWNM)
               and regexp_like('aa', a.DWWM))
     where rn > 0
       and rn < 10
      

  12.   

    A表:DWNM     DWBM      DWMC
        001     0050501   市劳保局政务中心窗口
        002         01010     市烟叶生产领导小组办公室
        003       01011    市人民政府妇女儿童工作委员会B表:XMNM     XMBM      XMMC
        001     99999901   其他非税收入
        002      990102     捐赠收入
        003      04509902    技校招生报名考务费C表:DWNM      XMNM
        001        003
        002        001
        003        002如果在输入单位编码101的时候要求显示的结果:
    单位编码          单位名称                      项目编码      项目名称 
    01010    常德市烟叶生产领导小组办公室        99999901    其他非税收入
    01011    常德市人民政府妇女儿童工作委员会     990102       捐赠收入 
      

  13.   

    你可以判断一下用户的输入的表单,
    如果单位外码和单位名称都有输入,sql语句如下:
    select A.DWBM,A.DWMC,B.XMBM,B.XMMC,B.SFXX,B.SFSX
    from A,B,C
    where (A.DWBM like '%101%' and A.DWMC like '%xxx%')
    and A.DWNM=C.DWNM and B.XMNM=C.XMNM;
    如果只输入了单位外码,sql语句如下:
    select A.DWBM,A.DWMC,B.XMBM,B.XMMC,B.SFXX,B.SFSX
    from A,B,C
    where A.DWBM like '%101%
    and A.DWNM=C.DWNM and B.XMNM=C.XMNM;
    如果只输入了单位名称,sql语句如下:
    select A.DWBM,A.DWMC,B.XMBM,B.XMMC,B.SFXX,B.SFSX
    from A,B,C
    where A.DWMC like '%xxx%'
    and A.DWNM=C.DWNM and B.XMNM=C.XMNM;
      

  14.   

    sql语句可以用动态拼接来写,根据用户的输入来添加相应的条件。
      

  15.   

    呵呵,原来除开分页,ORACLE和MSSQL的语句一致的。