在SQL查询中添加新列以显示记录是否包含子元素

时间:2019-01-16 06:52:07

标签: sql oracle siebel

要求是显示活动记录(S_EVT_ACT表)以及其中的新列,以显示活动记录是否包含任何附件。 活动附件属于S_ACTIVTY_ATT表,并且与父活动具有关系,因为附件的PAR_ROW_ID =活动的ROW_ID。

新列可以为每个活动记录将输出显示为Y或N。另外,新列可以显示活动的附件数。

在这种情况下,SQL查询应该是什么。

2 个答案:

答案 0 :(得分:1)

使用exists

select a.*,
       (case when exists (select 1
                          from S_ACTIVTY_ATT att
                          where att.PAR_ROW_ID = a.ROW_ID
                         )
             then 'Y' else 'N'
        end) as has_attachment
from S_EVT_ACT a;

通常,exists的性能要优于任何聚合解决方案。特别是在att(PAR_ROW_ID)上有索引时,这应该很快。

答案 1 :(得分:0)

如果您确实要有一列,则每次插入附件时必须填充(增加)该值。如果只想在SELECT查询中看到它,则可以执行以下操作:

SELECT act.*, att.ATT_COUNT 
FROM S_EVT_ACT act
    LEFT OUTER JOIN (SELECT PAR_ROW_ID, COUNT(*) AS ATT_COUNT
        FROM S_ACTIVTY_ATT 
        GROUP BY PAR_ROW_ID ) AS att ON (act.ROW_ID = att.PAR_ROW_ID)

注意:它应该可以工作,但是根据您的行数和其他我不知道的事情,可能会有更好的解决方案。