这样一段语法:
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 ...
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 ...
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(+);
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' );
oracle参考手册是这么说的:带(+)的是oracle9i以前的语法,oracle9i仍然支持以前版本的语法,但现在应该使用新的语法(left join /right join).(+)放在中间与放在末尾有什么区别吗?不过这里说的旧语法是(+)放在=的右或右的,
不过这个SQL应该是可以出结果的,left join和(+)效果应该是一样的,目前的差别是1楼没有写like '%'的语句。
如果使用 left的话这句一定要写在from段,不能写在where段。
写在where段必须加上(+)
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或者其它左右连接,直接用,隔开会提交某种效率。
而且有一点要提醒的是,你的三个表之间都要有联系才行,一旦有一方没有联系就不该直接写在一起联接,不然查出来的也不是你所想要的结果。
那现在我 sn12.sn12_code like '%' 这句没有地方挂了,挂上又是没结果,请帮忙!!
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 '%'