DB2 SQL 多重联接问题



我有一个有两个 JOIN 的查询,但它不起作用。我没有收到任何错误。它只是不返回任何记录。如果我分开我的查询,那么它就可以了。我在这里做错了什么?

当我拆分查询时,我得到一条记录,这是我应该得到的。

完整查询:

SELECT HPOL07.*, @RFC.*, @AAM.*
FROM BPCSPROF.HPOL07
JOIN BPCSPROF.@RFC ON PRFC = @RFC.RFCNUM  AND PPRF = @RFC.RFCPRC
AND PGLNO = @RFC.RFCGLN
JOIN BPCSPROF.@AAM ON PPRF = @AAM.AAMPRC  AND PGLNO = @AAM.AAMGLN
WHERE PORD = '605400' AND PID <> 'PZ' 

单独的查询:

SELECT HPOL07.*, @RFC.*
FROM BPCSPROF.HPOL07
JOIN BPCSPROF.@RFC ON PRFC = @RFC.RFCNUM  AND PPRF = @RFC.RFCPRC
AND PGLNO = @RFC.RFCGLN
WHERE PORD = '605400' AND PID <> 'PZ'

SELECT HPOL07.*, @AAM.*
FROM BPCSPROF.HPOL07
JOIN BPCSPROF.@AAM ON PPRF = @AAM.AAMPRC  AND PGLNO = @AAM.AAMGLN
WHERE PORD = '605400' AND PID <> 'PZ' 

您正在执行内部联接,因此 HPOL07 中的每条记录都必须在 @RFC 和@AAM中都有一个记录...

这就是你想要的吗?

如果@RFC或@AAM中有匹配的记录,则需要使用LEFT OUTER JOIN

SELECT HPOL07.*, @RFC.*, @AAM.*
FROM BPCSPROF.HPOL07
LEFT OUTER JOIN BPCSPROF.@RFC 
ON PRFC = @RFC.RFCNUM  AND PPRF = @RFC.RFCPRC
AND PGLNO = @RFC.RFCGLN
LEFT OUTER JOIN BPCSPROF.@AAM 
ON PPRF = @AAM.AAMPRC  AND PGLNO = @AAM.AAMGLN
WHERE PORD = '605400' AND PID <> 'PZ' 

这个问题当然可以使用表模式,但我的猜测是PGLNO是两个连接之间的不同值。 如果是这种情况,联接将无法工作,因为它有效地在当前查询中查找@AAM.AAMGLN = @RFC.RFCGLN。 这是因为两个连接都使用PGLNO值,并且两个连接子句需要相同。

如果你想要两个单独的结果,@Charles答案应该做你想要的。

您还可以使用:

SELECT * FROM A h 
LEFT JOIN B pk ON (pk.PKKONZ='010') AND (pk.PKFIRM IN (10, 20 30)) AND h.TPPALN = pk.PKPALN 
LEFT JOIN C ar ON (ar.TZKONZ='010') AND (ar.TZFIRM IN (55, 56 ,57)) AND h.TPIDEN = ar.TZIDEN
WHERE ....
ORDER BY ...

最新更新