У меня есть база данных db2 с двумя таблицами; назовем их order
и order_comment
.Столбец или глобальная переменная не найдены с вложенными подзапросами
Я хочу, чтобы получить дату последнего комментария вместе с информацией о заказе.
на SQL Server 2005, например, я мог бы написать запрос вроде следующего:
select a.*, (select comment_datetime FROM
(select comment_datetime, RANK() OVER (PARTITION BY order_id ORDER BY comment_datetime DESC) AS [rank]
FROM order_comment c where c.order_id = a.id
) b where b.[rank] = 1) as 'Last Comment'
from order a
Это возвращает следующие данные:
| id | description | Last Comment | | 1 | fake order | 2013-04-03 10:05:04.797 |
Однако, когда я пытаюсь запустить следующее (что, по моему мнению, эквивалентно) по сравнению с моей базой данных db2, я получаю эту ошибку: Column or global variable id1 not found.
select b.id1, b.id2, b.status,
(select a.code from
(select code, RANK() over (order by date desc, time desc) as recent from
history where h_id1 = b.id1 and h_id2 = b.id2
and code in ('A', 'B', 'C')) a where a.recent = 1)
as 'recent code'
from item b
После некоторого разговора я обнаружил, что с использованием id1
в моем первом подзапросе не было получено такой же ошибки; У меня возникла проблема при использовании глобального значения в подзапросе более одного уровня.
Это намеренное поведение? Это кажется мне очень странным; Я думаю, что любое количество подзапросов должно иметь доступ к любым значениям, принадлежащим любому родителю (как это имеет место на сервере sql server 2005, и я принимаю большинство других РСУБД).
Если это, по сути, ожидаемое поведение, есть ли другой способ, которым я могу выполнить эту задачу?