想象一个交易表和一个以交易 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
可以看出,两个级别的相同关联被执行了两次,只是为了获取不同的字段——一次获取结算日期,一次获取结算金额。因此问题 - 如何引用和重用相关子查询?