我有一个要求是“从基金表中选择所有行,其资金表中没有找到自己的fund_id作为替换fund_id”。 每个基金记录都创建了具有旧状态和新状态的历史记录。
每当特定基金经历无效流程时(即旧状态为新状态:null - &gt;'已发布' - &gt;'void'---&gt;'重发',则生成替换fund_id < / p>
链接到原始记录,该记录被视为具有历史记录为null的新基金记录 - &gt; '发行'。 请参阅以下数据以获得更多说明。
基金历史表:
列和数据
fund_hist_id fund_id old_status new_status
128 2444582 null I
127 2445579 V R
124 2445579 I v
123 2445579 null I 129 2445562 null I
基金表:
列及其数据
FUND_ID FUND_NAME ORIGINAL_FUND_ID REPLACEMENT_FUND_ID
2444582 ABC FUND 2444582 NULL
2445579 ABC FUND 2445579 2444582
2445562 XYZ FUND 2445562 NULL
请注意:根据我的要求,我必须从基金表中选择原始基金ID:2445579,2445562
由于2444582作为替换基金ID链接到基金表中的任何其他记录,我必须忽略此记录,但选择2445579,因为这是原始记录 历史记录“空”到“已发布”之一。另外2445562在历史记录中也没有任何替换记录,因此我需要选择此记录为
好。
任何人都可以在考虑性能的情况下向我提供查询。
如果有任何细节不明确,请告诉我?
问候 RAJESH
答案 0 :(得分:0)
考虑了两个表格和资金。所需的查询将是:
select *
from fund f, hist h
where f.FUND_ID=h.FUND_ID and f.fund_id is not null
and f.FUND_ID not in (select nvl(REPLACEMENT_FUND_ID,'0') from fund)
and h.OLD_STATUS is null and h.NEW_STATUS='I';