使用相关联接的SQL查询

时间:2014-11-23 15:23:14

标签: oracle11g oracle-sqldeveloper

我有一个要求是“从基金表中选择所有行,其资金表中没有找到自己的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

1 个答案:

答案 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';