【问题标题】:DB2 SQL multiple JOIN issueDB2 SQL 多个 JOIN 问题
【发布时间】:2018-08-24 20:22:39
【问题描述】:

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

【问题讨论】:

    标签: sql db2 db2-400 rpgle


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      如果您想要两个单独的结果,@Charles 答案应该可以满足您的需求。

      【讨论】:

        【解决方案3】:

        你也可以使用:

        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 ...
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-04
          • 1970-01-01
          • 2011-03-25
          • 2011-07-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多