Я пытаюсь использовать подзаголовок, чтобы получить последнюю строку из связанной таблицы, но кажется, что подзаголовок не знает об одной из вовлеченных таблиц, которая находится во внешнем запросе, ошибка в 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';
Что мне делать, чтобы исправить это?
У вас есть подзапрос, который ссылается на таблицы из самого внешнего запроса. Увы, Oracle не позволяет ссылаться на таблицы более чем на один уровень. (Что отстой!) Какую версию Oracle вы используете? В Oracle 11 и выше лучший способ исправить это - с предложением WITH. – mathguy
Плохая новость: вы не можете ссылаться на более чем 1 уровень вверх. (это по дизайну) Таким образом, ссылка на KD слишком удалена. нам пришлось бы реструктурировать запрос. либо CTE, либо переместить выделение на соединение как-то ... – xQbert