首页 > 解决方案 > DB2 SQL 多个 JOIN 问题

问题描述

我有一个带有两个 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' 

标签: sqldb2db2-400rpgle

解决方案


您正在执行内部连接,因此对于 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' 

推荐阅读