SQL SERVER2000中的多表联合查询程序如下:
SELECT * FROM  
(SELECT pp.HTNO, pcd.NAME AS LD1  FROM PUBLiC_PLAN pp JOiN PUBLiC_CODE_DEViCE  pcd  ON   pp.LD_1_iD=pcd.DEViCE_iD  WHERE pp.PLAN_STYLE<>-1 ) AS A  
LEFT JOiN  
(SELECT pp.HTNO, pcd.NAME AS LD2 FROM PUBLiC_PLAN pp JOiN  PUBLiC_CODE_DEViCE  pcd  ON pp.LD_2_iD=pcd.DEViCE_iD) AS B  ON A.HTNO = B.HTNO  
LEFT JOiN  
(SELECT pp.HTNO,pp.PONO ,pp.SG,pp.D_DECiSiON_SG  FROM PUBLiC_PLAN pp) AS C  ON A.HTNO = C.HTNO  
LEFT JOiN  (SELECT pp.HTNO, pcd.NAME AS CAST1,pp.D_TiME_SUBTRACT  FROM PUBLiC_PLAN pp JOiN  PUBLiC_CODE_DEViCE  pcd  ON pp.CAST_1_iD = pcd.DEViCE_iD) AS D  ON A.HTNO = D.HTNO  
ORDER BY SUBSTRING(CAST(A.HTNO AS CHAR(6)),2,5) 在oracle10g中怎么实现上述程序的多表查询

解决方案 »

  1.   

    在oracle10g中这样的语句是可以执行的
    问题子查询太多,可能性能不好
      

  2.   

    在10g上可以用这样的。LEFT JOIN,但9i以前的就不行。

    ORDER BY SUBSTRING(CAST(A.HTNO AS CHAR(6)),2,5) 
    改成
    ORDER BY SUBSTR(CAST(A.HTNO AS CHAR(6)),2,5) 
    就可以了。
      

  3.   

    LEFT JOIN,在9i以前的就不行。
    在10g上可以用这样的。把
    ORDER BY SUBSTRING(CAST(A.HTNO AS CHAR(6)),2,5) 
    改成
    ORDER BY SUBSTR(CAST(A.HTNO AS CHAR(6)),2,5) 
    就可以了。
      

  4.   

    上面CQ中的复合联合检索在oracle10g是不能执行的,已经把SUBSTRING改为substr()了!而且,我的联合查询比上面写的还要复杂,我为了节省空间有很多还没写!