使用相关联接的SQL查询
问题描述:
我有一个要求“选择基金表中没有找到自己的fund_id作为基金表中其他行上的替换fund_id的所有行”。每个基金记录都有历史记录创建,具有旧状态和新状态。使用相关联接的SQL查询
,当特定基金通过无效的过程会(即旧状态到新的状态:空 - >“发行” - >“无效” --->“补发”则生成替代fund_id
链接到被视为新基金纪录历史为空原始记录 - >“发出” 请参阅下面的数据进一步澄清
基金历史表:
列。数据是
fund_hist_id fund_id OLD_STATUS NEW_STATUS
128 2444582空余
127 2445579 VR
124 2445579 I V
123 2445579空余 129 2445562空余
基金表:
个列,它的数据是
FUND_ID FUND_NAME ORIGINAL_FUND_ID REPLACEMENT_FUND_ID
2444582 ABC基金2444582 NULL
2445579 ABC基金2445579 2444582
2445562 XYZ基金2445562 NULL
请注意:根据我的要求我必须从基金表中选择原始基金ID:2445579,2445562
因为2444582作为替换基金ID链接到基金表中的任何其他记录我必须忽略此记录,但选择2445579,因为这是原始记录与 其中历史记录'空'的一个'发出'。也是2445562没有任何历史记录中的替换记录,因此我需要选择此记录为
好。
任何人都可以提供我查询考虑到性能的想法。
请让我知道,如果任何细节不清楚?
问候 拉杰什
答
考虑两个表HIST和基金。所需的查询将是:
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';
任何人都可以请我提供查询。我已准备好查询,但需要我的同事的一些输入来比较是否有更好的方法相同? – user2090701 2014-11-24 12:43:25