这是我需要的正确 SQL 吗? [JDE, DB2]

Is this the correct SQL for what I need? [JDE, DB2]

考虑以下 JD Edwards 数据库 tables:

table 由一个公共字段链接:文档编号 (DOCO)。 对于 F3112 中的给定记录,F31122 中可能有零个或多个记录。

我正在尝试编写一个查询,其中 returns 来自 F3112 的记录满足以下条件:

  1. F31122 中至少有一条匹配记录 F31122.WTHRW(工作小时数)> 0。
  2. F3112.WLOPST(状态码)30到99(含)之间。
  3. F3112.WLSTRT(开始日期)>=指定日期(JDE Julian 日期)。
  4. F3112.WLCTS4(金额 - 未计直接人工)= 0 OR F3112.WLCTS9(小时数 - 未计直接人工)= 0.

我想出了以下 SQL 似乎得到了我想要的 - 但我不是 100% 确定。

SELECT DISTINCT F3112.WLDOCO AS DOC_NO,
                F3112.WLDCTO AS DOC_TYPE,
                F3112.WLOPST AS STATUS,
                F3112.WLCTS4 AS CTS4,
                F3112.WLCTS9 AS CTS9,
                F3112.WLSTRT AS START,
                F3112.WLSTRX AS COMPLETE
FROM   PROD2DTA.F3112 F3112
       INNER JOIN PROD2DTA.F31122 F31122
         ON F3112.WLDOCO = F31122.WTDOCO
            AND (SELECT COUNT(*)
                 FROM   PROD2DTA.F31122
                 WHERE  F31122.WTHRW <> 0) > 0
WHERE  F3112.WLOPST BETWEEN '30' AND '99'
       AND F3112.WLSTRT >= 121060
       AND ( F3112.WLCTS4 = 0
              OR F3112.WLCTS9 = 0 )

我不需要 return F31122 table 的任何东西。我只需要确保满足选择标准的第一个项目符号。

我本来没有 DISTINCT 子句,结果被多次点击。我假设这是笛卡尔积的情况。

这对我正在尝试做的事情有意义吗?如果没有,请告诉我我需要做什么。

您的描述似乎需要相关的 EXISTS 条件。在您首先尝试修复任何引入的重复项之前,不要使用 DISTINCT。

SELECT          F3112.WLDOCO AS DOC_NO,
                F3112.WLDCTO AS DOC_TYPE,
                F3112.WLOPST AS STATUS,
                F3112.WLCTS4 AS CTS4,
                F3112.WLCTS9 AS CTS9,
                F3112.WLSTRT AS START,
                F3112.WLSTRX AS COMPLETE
FROM   PROD2DTA.F3112 F3112
       WHERE EXISTS (SELECT 1 FROM PROD2DTA.F31122 F31122
                   WHERE F3112.WLDOCO = F31122.WTDOCO
                   AND F31122.WTHRW > 0) 
       AND F3112.WLOPST BETWEEN '30' AND '99'
       AND F3112.WLSTRT >= 121060
       AND ( F3112.WLCTS4 = 0
              OR F3112.WLCTS9 = 0 )