【发布时间】:2016-11-11 15:42:08
【问题描述】:
我正在尝试使用子选择从关联表中获取最后一行,但似乎子选择不知道外部查询中涉及的其中一个表,错误位于 kd.KPI_DEF_ID,无效标识符。将其替换为数字使查询有效。
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';
我能做些什么来解决这个问题?
【问题讨论】:
-
您有一个从最外层查询引用表的子查询。唉,Oracle 不允许引用超过一级深度的表。 (太糟糕了!)您使用的是什么 Oracle 版本?在 Oracle 11 及更高版本中,解决此问题的最佳方法是使用 WITH 子句。
-
坏消息是你不能引用超过 1 个级别。 (这是设计使然)所以对 KD 的引用太远了。我们必须重组查询。通过 CTE 或以某种方式将选择移动到连接...