サブSELECTを使用して関連するテーブルから最後の行を取得しようとしていますが、サブセレクトが外部クエリに含まれるテーブルの1つを知らないようですkd.KPI_DEF_IDの無効な識別子です。これを数字に置き換えると、クエリが有効になります。Oracle:サブセレクト内の無効な識別子
SELECT bp.bp_id,
kd.kpi_def_id,
kd.kpi_name,
ks.kpi_status_now,
kd.threshold_min_val,
kd.threshold_max_val,
kd.threshold_min_alert,
kd.threshold_max_alert,
e.event_id,
e.event_name,
(SELECT *
FROM (SELECT l.log_desc
FROM rator_monitoring.alert_logs l
WHERE l.kpi_def_id = kd.kpi_def_id
ORDER BY TIMESTAMP DESC)
WHERE rownum = 1) log_desc
FROM business_process bp
JOIN kpi_definition kd
ON (kd.bp_id = bp.bp_id)
JOIN rator_monitoring.kpi_status ks
ON (ks.kpi_def_id = kd.kpi_def_id)
JOIN event e
ON (e.event_id = kd.event_id)
WHERE kd.kpi_active_current = 'Y';
これを解決するにはどうすればよいですか?
最も外側のクエリのテーブルを参照するサブクエリがあります。悲しいかな、オラクルでは、1つ以上のレベルの表を参照することはできません。 (どちらがうんざり!)どのOracleのバージョンを使用していますか? Oracle 11以降では、これを修正する最良の方法はWITH句を使用することです。 – mathguy
悪いニュースは1レベル以上を参照できないことです。 (これは設計によるものです)KDへの参照はあまりにも遠すぎます。クエリを再構成する必要があります。いずれかの方法でCTEまたは選択をmovにしてください... – xQbert