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

这是我需要的正确SQL吗?[JDE,DB2],sql,db2,jdedwards,Sql,Db2,Jdedwards,考虑以下JD Edwards数据库表: 工单工艺路线实际名称:F3112 工单时间事务实际名称:F31122 这些表由一个公共字段链接:documentnumber DOCO。 对于F3112中的给定记录,F31122中可能有零条或多条记录 我试图编写一个查询,返回F3112中满足以下条件的记录: F31122中至少有一条匹配记录,其中F31122.WTHRW工时>0。 F3112.WLOPST状态代码介于30和99之间(含30和99)。 F3112.WLSTRT开始日期>=指定的日期JDE J

考虑以下JD Edwards数据库表:

工单工艺路线实际名称:F3112 工单时间事务实际名称:F31122 这些表由一个公共字段链接:documentnumber DOCO。 对于F3112中的给定记录,F31122中可能有零条或多条记录

我试图编写一个查询,返回F3112中满足以下条件的记录:

F31122中至少有一条匹配记录,其中F31122.WTHRW工时>0。 F3112.WLOPST状态代码介于30和99之间(含30和99)。 F3112.WLSTRT开始日期>=指定的日期JDE Julian日期。 F3112.WLCTS4金额-未计入的直接人工=0或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 )
我不需要返回F31122表中的任何内容。我只需要确保符合选择标准的第一个项目

我最初没有DISTINCE子句,因此被多次点击。我想这是笛卡尔积的情况


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

您的描述似乎需要一个相关的条件。不要使用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 )

您的描述似乎需要一个相关的条件。不要使用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 )

子查询看起来很奇怪。子查询看起来很奇怪。