这样一段语法:
  SELECT DISTINCT sn11.sn11_clrcode,   
         sn11.sn11_clrnm,
         sn11.sn11_pantone,
         sn12.sn12_clntccd,   
         sn12.sn12_clntcnm  
    FROM sn11 
join sn30 on sn11.sn11_clrcode = sn30.sn30_clrcode
left JOIN sn12 ON sn11.sn11_clrcode = sn12.sn12_clrcode and sn12.sn12_code like '%'  
   WHERE ( sn30.sn30_mstknos ='2567F000A' );sn11是颜色表,资料如下:
颜色编码         颜色名称            pantone号
sn11_clrcode   sn11.sn11_clrnm  sn11.sn11_pantone
000            白                                     
500            黑               sn30是料号表,资料如下:
规格料号        颜色值 
sn30_mstknos  sn30_clrcode
2567F000A     000
2567F000A     500sn12是颜色对应客户色号表,其中没有资料
颜色编码              客户色号               客户色名
sn12.sn12_clrcode  sn12.sn12_clntccd   sn12.sn12_clntcnm 现在我想查询规格料号2567F000A的所有颜色值,颜色名称,以及对应的客户色号,客户色名在sqlserver中可以得出我想的结果如下:
sn11.sn11_clrcode  sn11.sn11_clrnm  sn11.sn11_pantone  sn12.sn12_clntccd  sn12.sn12_clntcnm
000                白           
500                黑可是在oracle里,我却一条记得都得不到
搞不懂oracle的left join ...

解决方案 »

  1.   

    SELECT SN11.SN11_CLRCODE,
           SN11.SN11_CLRNM,
           SN11.SN11_PANTONE,
           SN12.SN12_CLNTCCD,
           SN12.SN12_CLNTCNM
      FROM SN11, SN12, SN30
     WHERE SN30.SN30_MSTKNOS = '2567F000A'
       AND SN11.SN11_CLRCODE = SN30.SN30_CLRCODE
       AND SN11.SN11_CLRCODE = SN12.SN12_CLRCODE(+);
      

  2.   


      SELECT DISTINCT sn11.sn11_clrcode,  
            sn11.sn11_clrnm, 
            sn11.sn11_pantone, 
            sn12.sn12_clntccd,  
            sn12.sn12_clntcnm  
        FROM sn11 
    join sn30 on sn11.sn11_clrcode = sn30.sn30_clrcode 
    left OUTER JOIN sn12 ON sn11.sn11_clrcode = sn12.sn12_clrcode and sn12.sn12_code like '%'  
      WHERE ( sn30.sn30_mstknos ='2567F000A' ); 
      

  3.   

    chensi05,结果是我想要的,另外我想问问:
    oracle参考手册是这么说的:带(+)的是oracle9i以前的语法,oracle9i仍然支持以前版本的语法,但现在应该使用新的语法(left join /right join).(+)放在中间与放在末尾有什么区别吗?不过这里说的旧语法是(+)放在=的右或右的,
      

  4.   

    doer_ljy ,这样查询结果还是没有数据,left outer join 与left join应该没有区别吧?
      

  5.   

    确实没区别,是我太粗心了。
    不过这个SQL应该是可以出结果的,left join和(+)效果应该是一样的,目前的差别是1楼没有写like '%'的语句。
    如果使用 left的话这句一定要写在from段,不能写在where段。
    写在where段必须加上(+)
      

  6.   

    select k.sn11_clrcode,k.sn11_clrnm,k.sn30_clrcode,s2.sn12_clntccd,s2.sn12_clntcnm from (
    select s1.sn11_clrcode as sn11_clrcode,s1.sn11_clrnm as sn11_clrnm,s3.sn30_clrcode as sn30_clrcode from sn11 s1,sn30 s3 where s3.sn30_mstknos = '2567F000A'
    and s3.sn30_clrcode = s1.sn11_clrcode ) k ,sn12 s where k.sn11_clrcode = s.sn12_clrcode 其实用不上left join或者其它左右连接,直接用,隔开会提交某种效率。
    而且有一点要提醒的是,你的三个表之间都要有联系才行,一旦有一方没有联系就不该直接写在一起联接,不然查出来的也不是你所想要的结果。
      

  7.   


    那现在我 sn12.sn12_code like '%'  这句没有地方挂了,挂上又是没结果,请帮忙!!
      

  8.   


    SQL codeSELECT SN11.SN11_CLRCODE, 
          SN11.SN11_CLRNM, 
          SN11.SN11_PANTONE, 
          SN12.SN12_CLNTCCD, 
          SN12.SN12_CLNTCNM 
      FROM SN11, SN12, SN30 
    WHERE SN30.SN30_MSTKNOS = '2567F000A' 
      AND SN11.SN11_CLRCODE = SN30.SN30_CLRCODE 
      AND SN11.SN11_CLRCODE = SN12.SN12_CLRCODE(+); 
      and sn12.sn12_code(+) like '%'