要求是显示活动记录(S_EVT_ACT表)以及其中的新列,以显示活动记录是否包含任何附件。 活动附件属于S_ACTIVTY_ATT表,并且与父活动具有关系,因为附件的PAR_ROW_ID =活动的ROW_ID。
新列可以为每个活动记录将输出显示为Y或N。另外,新列可以显示活动的附件数。
在这种情况下,SQL查询应该是什么。
答案 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)
注意:它应该可以工作,但是根据您的行数和其他我不知道的事情,可能会有更好的解决方案。