如何重写使用self上的子查询作为连接的查询

时间:2013-02-27 17:41:17

标签: sql db2 subquery self-join

如何将以下查询重写为连接?我认为重写它作为一个连接会表现得更好(我理论化)但我很难获得正确的连接。任何帮助深表感谢。

SELECT O.JOBNUM, O.JOBNAME, O.STARTTS, 
(SELECT 
    MIN(I.STARTTS)
 FROM TABLE1 AS I
 WHERE 
    I.STARTTS > O.STARTTS AND 
    I.JOBNAME = O.JOBNAME) 
 AS ENDTS
 FROM TABLE1 AS O;

基本上,上述查询用于检索任何给定任务实例的ENDTS。 ENDTS不会保存,并且会在循环中运行相同的任务时自动计算,因此任何给定任务的ENDTS在再次运行时是同一任务(由名称标识)的STARTTS。如果任务尚未完成运行,则ENDTS可以使用NULL。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果您想将其重写为JOIN,则可以使用:

SELECT o.JOBNUM, 
    o.JOBNAME, 
    o.STARTTS, 
    MIN(i.STARTTS) ENDTS
FROM TABLE1 AS o
LEFT JOIN TABLE1 AS i
    ON i.STARTTS > o.STARTTS 
    AND i.JOBNAME = o.JOBNAME
 GROUP BY o.JOBNUM, o.JOBNAME, o.STARTTS;