ORACLE 右连接又加NVL,如何实现

来源:百度知道 编辑:UC知道 时间:2024/07/14 01:48:16
SELECT T.CO,T.EVEBXINSHPQTY,....,T.PRCUN,T2.TXEMP FROM TXD000GHFA1 T ,T08040DAC21 T2
WHERE T.CO = T2.CO(+) AND T.DTLVDP = T2.DTLVDP(+) AND T.PDNO = T2.PDNO(+)
AND NVL(T.PDURCLASSID,'@') = NVL(T2.PDURCLASSID,'@')(+) AND NVL(T.SPEC,'@') = NVL(T2.SPEC,'@')(+)
我的两个TABLET,T2想通过5个栏位相连接,因为T2资料不全时,也要查出T1的资料,所以用到右连接。但因为后面的两个栏位是可以为NULL的,所以要加NVA()处理,这样之后,NVL(T2.PDURCLASSID,'@')(+) AND NVL(T.SPEC,'@') = NVL(T2.SPEC,'@')(+)就报错,,

请各位高手帮忙解决,。。。如有解决必有其更多加分。。。

我觉得您的问题本身就有问题,可能是我没明白你的意思,我觉得你想要的结果是一下sql,不知道对不对?
create table table1 as (SELECT T.CO a1,T.DTLVDP a2,T.PDNO a3,nvl(T.PDURCLASSID,'@') a4,nvl(T.SPEC,'@') a5 FROM TXD000GHFA1 T ,T08040DAC21 T2
WHERE T.CO = T2.CO(+) AND T.DTLVDP = T2.DTLVDP(+) AND T.PDNO = T2.PDNO(+) ) );
create table table1 as (SELECT T2.CO a1,T2.DTLVDP a2,T2.PDNO a3,nvl(T2.PDURCLASSID,'@') a4,nvl(T2.SPEC,'@') a5 FROM TXD000GHFA1 T ,T08040DAC21 T2
WHERE T.CO = T2.CO(+) AND T.DTLVDP = T2.DTLVDP(+) AND T.PDNO = T2.PDNO(+) ) );
select * from table1 a,table2 b where a.a4=b.a4(+) and a.a5=b.a5(+);
不知道您要的是不是这个结果,上面的也可以建成VIEW,可能更好些,如果要写成一句SQL的话,比较困难,本人也不推荐使用。

(NVL(T2.PDURCLASSID, '@'))(+) 再加个括号试试呢