大きなクエリがあります (私が書いたものではありませんが、いくつか変更を加えています)。私を悩ませていることの 1 つは、約 4 か所で同じ COALESCE 関数を使用していることです。おそらくDUALからの選択に参加することによって、それを除外する方法はありますか? それを因数分解すると、パフォーマンス上の利点はありますか?
少し太字にしたクエリを次に示します。
select
tbl1.gid
[snip]
,COALESCE(t1_end_dt, t6_actl_end_dt,t6_calc_end_dt) perd_end_dt
,t1_end_dt
FROM tbl1
....
JOIN tbl2 ON (t2_pk = wpck_wrkr_id AND
t2_ind_1 ='Y' AND
COALESCE(t1_end_dt, t6_actl_end_dt, t6_calc_end_dt)
BETWEEN t2_strt_dt AND t2_end_dt)
JOIN tbl3 ON (t3_pk = t2_fk_t3_pk AND
COALESCE(t1_end_dt, t6_actl_end_dt, t6_calc_end_dt)
BETWEEN t3_strt_dt AND t3_end_dt)
LEFT JOIN tbl4 tbl4_a ON (tbl4_a.t4_pk = chkw_wkt_id)
.....
GROUP BY tbl1.gid
.....
,COALESCE(t1_end_dt, t6_actl_end_dt, t6_calc_end_dt)
,COALESCE(tbl4_b.t4_or_id, tbl4_a.t4_or_id, t7_or_id )
,t1_end_dt
ORDER BY perd_end_dt
SELECT で pred_end_dt という名前を付け、ORDER BY でその名前で参照することにより、COALESCE の 1 つを既に除外していることに注意してください。