1

取引 ID で結合された取引テーブルと cds_coupon テーブルを想像してください。決済日と決済金額も持つクーポンテーブル。必要なクエリは、次に決済するクーポンの金額と日付を取得することです。

    select t.tradeId AS tradeId,
(
  select settlement_date from cds_coupon e 
  where t.tradeId=e.tradeId 
  and e.settlement_date = (select min(settlement_date) from cds_coupon ei where ei.tradeId = t.tradeId  and ei.settlement_date > sysdate )
)  AS settlement_date,
( 
  select settlement_amount from cds_coupon e 
  where t.tradeId=e.tradeId 
  and e.settlement_date = (select min(settlement_date) from cds_coupon ei where ei.tradeId = t.tradeId and ei.settlement_date > sysdate )
)  AS settlement_amount, 
   FROM Trade t

ご覧のように、2 つのレベルの同一の相関関係が、異なるフィールドを取得するために 2 回実行されます。1 回目は決済日を取得するため、もう 1 回は決済金額を取得するためです。したがって、質問 - 関連付けられたサブクエリを参照して再利用する方法は?

4

2 に答える 2

0

相関サブクエリの代わりに JOIN を使用します。

select t.tradeId, e.settlement_date, e.settlement_amount
from Trade t
join (select ei.tradeId, ei.settlement_date, ei.settlement_amount
      from cds_coupon ei
      join (select tradeId, min(settlement_date) min_date
            from cds_coupon
            where settlement_date > sysdate
            group by tradeId) emin
      on ei.tradeId = e.tradeId and ei.settlement_date = min_date) e
on t.tradeId = e.tradeId

サブクエリは、フィールドの最小値または最大値を含む行を見つけるための標準的なイディオムです。

于 2013-05-14T16:53:55.120 に答える