不大看得懂你的题目,最好把标结构简单的说一下
可以写外联接
比如table1 和 table2如果他们有共同的字段id,而tabal2中有没有数据不能确定
那么可以写select * 
from table1 LEFT OUTER JOIN table2
where table1.id = table2.id;

解决方案 »

  1.   

    使用外部联接"+"外部联接"+"的用法   外部联接"+"按其在"="的左边或右边分左联接和右联接.若不带"+"运算符的表中的一个行不直接匹配于带"+"预算符的表中的任何行,则前者的行与后者中的一个空行相匹配并被返回.若二者均不带’+’,则二者中无法匹配的均被返回.利用外部联接"+",可以替代效率十分低下的 not in 运算,大大提高运行速度.例如,下面这条命令执行起来很慢 select a.empno from emp a where a.empno not in (select empno from emp1 where job=’SALE’);   倘若利用外部联接,改写命令如下: select a.empno from emp a ,emp1 b where a.empno=b.empno(+) and b.empno is null and b.job=’SALE’;   可以发现,运行速度明显提高.
      

  2.   

    select 
        a.*,
        b.*,
        c.*,
        d.*
    from 
        TABLE1 a, 
        TABLE2 b,
        TABLE3 c,
        TABLE4 d
    where
        a.SN =* b.SN and a.SN =* c.SN and a.SN =* d.SN
      

  3.   

    select * from tb1,tb2 where tb1.sn = tb2.sn(+);
      

  4.   

    --example:SQL> SELECT * FROM BAO_TEMP_1
      2  /ST_ID        CYC_TIME   CAPACITY OWNER            MOVE_TIME
    ---------- ---------- ---------- --------------- ----------
    GL2             10.23       8000 WP                       1
    IT                  1       8000 HA                       1
    ET2I                1       8000 DF2                      1
    DF2I                1       8000 DF2                      1
    SM2                 1       8000 SM                       1選取了 5 列目前歷時: 00:00:00.47
    SQL> SELECT * FROM BAO_TEMP
      2  /ST_ID        CYC_TIME   CAPACITY OWNER            MOVE_TIME
    ---------- ---------- ---------- --------------- ----------
    GL2             10.23       8000 WP                       1
    IT                  1       8000 HA                       1
    ET2I                1       8000 DF2                      1
    DF2I                1       8000 DF2                      1
    SM2                 1       8000 SM                       1
    CuH                 1       8000 CuH                      1
    DF1G                1       8000 DF1                      1
    TDR                 1       8000 OS                       1選取了 8 列目前歷時: 00:00:00.78--使用外連接--------------------------------------------------
    SQL> SELECT A.ST_ID,A.CYC_TIME,B.ST_ID,B.CYC_TIME
      2  FROM BAO_TEMP A,BAO_TEMP_1 B
      3  WHERE A.ST_ID = B.ST_ID(+)
      4  /ST_ID        CYC_TIME ST_ID        CYC_TIME
    ---------- ---------- ---------- ----------
    CuH                 1
    DF1G                1
    DF2I                1 DF2I                1
    ET2I                1 ET2I                1
    GL2             10.23 GL2             10.23
    IT                  1 IT                  1
    SM2                 1 SM2                 1
    TDR                 1選取了 8 列目前歷時: 00:00:00.62
      

  5.   

    楼上的兄弟,你那是sql server的语法吧
    在oracle 中应该
    select * from table1,table2 where table1.sn=table2.sn(+);
      

  6.   

    我的意思是:有一个表中没有满足如SN='12345'的记录,那肯定该表的返回位NULL,但是其他3个表中都有满足SN='12345'的记录,有些表中甚至还有重复的记录(或者是另外的字段 如AMP,在重复的记录中数据都不一样),我的问题是,如何处理没有数据表的情况。我写了个SQL,一遇到有个表没有数据时,便不能查询,请帮我看看,该如何修改?
    SELECT 
    com_hsa.serial_num SN,
    com_hsa.hd_pos HD_POS,
    com_hsa.mr_res MR,
    gld_hsa.gram_load GLD,
    hal_hsa.hd_num wafercode,
    sam_hsa.psa PSA
    FROM (com_hsa  INNER JOIN hal_hsa ON com_hsa.serial_num = hal_hsa.serial_num)
    INNER JOIN sam_hsa
    ON com_hsa.serial_num=sam_hsa.serial_num
    and com_hsa.hd_pos=sam_hsa.hd_pos
    INNER JOIN gld_hsa 
    ON com_hsa.serial_num = gld_hsa.serial_num
    and com_hsa.serial_num=hal_hsa.serial_num
    and  com_hsa.hd_pos = hal_hsa.hd_pos
    and com_hsa.hd_pos=gld_hsa.hd_pos
    WHERE (hal_hsa.serial_num ='T525K5TPG')
    order by com_hsa.hd_pos asc
      

  7.   

    to  hsj20041004(光芒):
    那就是oracle的語法,可以看見我是在sql plus下測試的!
      

  8.   

    SELECT com_hsa.serial_num SN        ,
           com_hsa.hd_pos     HD_POS    ,
           com_hsa.mr_res     MR        ,
           gld_hsa.gram_load  GLD       ,
           hal_hsa.hd_num     wafercode ,
           sam_hsa.psa        PSA
    FROM   com_hsa,gld_hsa,hal_hsa,sam_hsa
    WHERE  com_hsa.serial_num = hal_hsa.serial_num(+)
    AND    com_hsa.serial_num = gld_hsa.serial_num(+)
    AND    com_hsa.serial_num = hal_hsa.serial_num(+)
    AND    com_hsa.hd_pos = hal_hsa.hd_pos(+)
    AND    com_hsa.hd_pos = gld_hsa.hd_pos(+)
    AND    hal_hsa.serial_num = 'T525K5TPG'
    order by com_hsa.hd_pos asc
      

  9.   

    使用外连接
    SELECT a.aa,
           b.bb,
           c.cc,
           d.dd
    FROM   TABLE1 a,TABLE2 b,TABLE3 c,TABLE4 d
    WHERE  a.sn = '12345'
    and    a.sn = b.sn(+)
    and    a.sn = c.sn(+)
    and    a.sn = d.sn(+)
      

  10.   

    为什么找到的数据成千上万啊???我没有这么多啊?不知道是这些数据是如何组合出来的??
    baojianjun(包子) 能帮我解释一下么?
      

  11.   

    这样选出来会有很多重复数据吗?用distinct去掉?
      

  12.   

    AND    com_hsa.hd_pos = hal_hsa.hd_pos
    AND    com_hsa.hd_pos = gld_hsa.hd_pos
    我觉得是这两个限制条件后不该加外联(+)