本帖最后由 rinndougenn 于 2010-08-06 00:39:00 编辑

解决方案 »

  1.   

    怪么?
    你用的是left join,就是说以右边的表为基础,左边没有就补null。
    你用right join看看
      

  2.   

    应该是这样的,一问里的''在oracle里被认为是null,and table_b.cx = ''这个条件是在左连的基础上再限定,由于null与任何值都不等,所以最后结果为空。
    二问。因为左连得结果是1 a 1 b和1 a 1 c,再加上限定条件and table_b.cx =‘1’,结果还是1 a 1 b和1 a 1 c。 
      

  3.   

    1:你说的这种情况不太可能出现,你再查查  2:
    select
    *
    from table_a
    left join table_b on  
    table_a.id = table_b.id  
    and table_b.cx = '1'   
    加了and table_b.cx = '1' ,先过滤B表达条件,得到2条记录,A表左关联,当然得到2条记录
      

  4.   

    SQL> select * from table_a;
     
                       ID C1
    --------------------- ----------
                        1 a
     
    SQL> select * from table_b;
     
                       ID CX
    --------------------- ----------
     
    SQL> 
    SQL> select
      2  *
      3  from table_a
      4  left join table_b on
      5  table_a.id = table_b.id
      6  ;
     
                       ID C1                            ID CX
    --------------------- ---------- --------------------- ----------
                        1 a                                
     
    SQL> 
    SQL> select
      2  *
      3  from table_a
      4  left join table_b on
      5  table_a.id = table_b.id
      6  and table_b.cx = ''
      7  ;
     
                       ID C1                            ID CX
    --------------------- ---------- --------------------- ----------
     
    SQL> 
      

  5.   

    SQL> select * from table_a;
     
                       ID C1
    --------------------- ----------
                        1 a
     
    SQL> select * from table_b;
     
                       ID CX
    --------------------- ----------
                        1 b
                        1 c
     
    SQL> 
    SQL> select
      2  *
      3  from table_a
      4  left join table_b on
      5  table_a.id = table_b.id
      6  ;
     
                       ID C1                            ID CX
    --------------------- ---------- --------------------- ----------
                        1 a                              1 b
                        1 a                              1 c
     
    SQL> 
    SQL> select
      2  *
      3  from table_a
      4  left join table_b on
      5  table_a.id = table_b.id
      6  and table_b.cx = '1'
      7  ;
     
                       ID C1                            ID CX
    --------------------- ---------- --------------------- ----------
                        1 a                                
     
    SQL> 
      

  6.   

    答:left join为左连接,即以left join左边的表为主表,用条件id去关联右边的表,如右边的表中没有记录匹配,则以空值补上。如单独给右边的表加上额外条件,相当于"封闭式关联",即右边表中要有记录与左边表匹配,且右边表匹配的这条记录要满足这些额外条件。
      

  7.   


    你说的我也略有所闻,但反过来用right join,再用我的条件,结果也是一样的.请你再去试试看.
      

  8.   


    这个说法好像也不正确啊.我主要要是的主表的内容,幅表,再怎么加条件也好,主表要出来记录.
    还有后面的问.加上and table_b.cx =‘1’是随意的.只是不明的是,怎么出来两条记录.也所学的东西,有点不一致
      

  9.   


    这个回答,好像正确.但1问中,我并没有用where,所以还是左连接的条件,并没有你说的是关联后过滤.
    2问中,也是同样.
    可能正如你说的那样.但回答太抽象了.能不能给小妹妹.具体点?
      

  10.   

    1.
    table_b.cx = ''

    table_b.cx is null;
    2..是先过滤b表
    然后a表和b表关联
      

  11.   

    table_b.cx = '1'   table_b.id = '1'