oracle 在on的灵活使用

 

select * from    PR_T_Vhtb1010 A RIGHT JOIN  PR_T_VHTB1040 B
ON A.IDNO=B.IDNO and A.PLANTCODE=B.PLANTCODE and A.PSC=B.PSC   AND substr(A.SPEC ,58,1) =' ' where B.idno='X106110504'

查询有四条记录,虽然substr(A.SPEC ,58,1)=‘ ’不存在,但是ON A.IDNO=B.IDNO and A.PLANTCODE=B.PLANTCODE and A.PSC=B.PSC  依然可以查询出记录,因为RIGHT ON A表的数据不存在,B表数据仍然能查询到

 

select * from    PR_T_Vhtb1010 A RIGHT JOIN  PR_T_VHTB1040 B
ON A.IDNO=B.IDNO and A.PLANTCODE=B.PLANTCODE and A.PSC=B.PSC  where B.idno='X106110504'  AND substr(A.SPEC ,58,1) =' '

查询没有数据,对查询结果再进行过滤,数据不存在,等同于。

select * from    PR_T_Vhtb1010 A inner JOIN  PR_T_VHTB1040 B
ON A.IDNO=B.IDNO and A.PLANTCODE=B.PLANTCODE and A.PSC=B.PSC  AND substr(A.SPEC ,58,1) =' '  where B.idno='X106110504' 

一条记录在关联表匹配多行,返回最近的行

SELECT decode(S.PLANTCODE,null,1,S.PLANTCODE) AS PLANTCODE, T.PACKINGSPOT,T.CONTROLNO, T.CPDCOMPANY,T.PARTSNO,T.ORDERNO,T.SEQNO,T.INVOICENO, T.CASENO, T.PARTSNAMECHN,T.PARTSNAMEEN,T.SHIPPINGQTY AS SHIPPINGQTY,T.COSTWITHTAXES,T.PRICE, T.DADDTIME,T.DUPDTIME,T.CUPDUSER
FROM SP_M_SHP  T  LEFT JOIN (select row_number() over (partition by PARTSNO order by TIMEFROM DESC ) rn, partsno,cpdcompany,timefrom,timeto,plantcode from  sp_m_sitem ) S ON T.CPDCOMPANY=S.CPDCOMPANY AND T.PARTSNO=S.PARTSNO  AND S.rn=1   and S.TIMEFROM<=SUBSTR(T.CONTROLNO,3,8)  AND S.TIMETO>=SUBSTR(T.CONTROLNO,3,8)
WHERE SUBSTR(T.CONTROLNO,3,6) ='201412'  and T.CPDCOMPANY='GTCPD' AND T.PACKINGSPOT IN (select key1 from SP_M_CONS2  where id='PACKSPOT' and flg2='0') ;

或者

SELECT DECODE ((select first_value(plantcode) over (partition by PARTSNO order by TIMEFROM DESC ) plantcode from  sp_m_sitem S  WHERE S.PARTSNO=T.PARTSNO  and S.TIMEFROM<=SUBSTR(T.CONTROLNO,3,8)  AND S.TIMETO>=SUBSTR(T.CONTROLNO,3,8) ),NULL,1,(select first_value(plantcode) over (partition by PARTSNO order by TIMEFROM DESC ) plantcode from  sp_m_sitem S  WHERE S.PARTSNO=T.PARTSNO  and S.TIMEFROM<=SUBSTR(T.CONTROLNO,3,8)  AND S.TIMETO>=SUBSTR(T.CONTROLNO,3,8) )) AS PLANTCODE, T.PACKINGSPOT,T.CONTROLNO, T.CPDCOMPANY,T.PARTSNO,T.ORDERNO,T.SEQNO,T.INVOICENO, T.CASENO, T.PARTSNAMECHN,T.PARTSNAMEEN,T.SHIPPINGQTY AS SHIPPINGQTY,T.COSTWITHTAXES,T.PRICE, T.DADDTIME,T.DUPDTIME,T.CUPDUSER
FROM SP_M_SHP  T
WHERE SUBSTR(T.CONTROLNO,3,6) ='201412'  and T.CPDCOMPANY='GTCPD' AND T.PACKINGSPOT IN (select key1 from SP_M_CONS2  where id='PACKSPOT' and flg2='0')
;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值