Я пытаюсь реализовать разбиение на страницы в запросе, который построен с использованием информации из представления, и мне нужно использовать функцию row_number()
над столбцом, когда я не знаю, какая таблица это из.Неоднозначное имя столбца с использованием row_number() без псевдонима
SELECT * FROM (
SELECT class.ID as ID, user.ID as USERID, row_number() over (ORDER BY
ID desc) as row_number FROM class, user
) out_q WHERE row_number > @startrow ORDER BY row_number
Проблема заключается в том, что у меня есть только имя столбца результата (ID или USERID), которые пришли из предыдущего запроса. Если я выполню этот запрос, он поднимет ошибку «Неоднозначное имя столбца» ID. Есть ли способ указать, что я ссылаюсь на идентификатор столбца, который выбирается, а не из другой таблицы?
Можно ли указать псевдоним на результат запроса?
Я уже пробовал следующие,
SELECT TOP 30 * FROM (
SELECT *, row_number() over (ORDER BY ID desc) as row_number FROM(
SELECT class.ID as ID, user.ID as USERID FROM class, user
) in_q
) out_q WHERE row_number > @startrow ORDER BY row_number
Он работает, но SGBD путается, на каком плане запроса он должен использовать, из-за небольшой строки цели настоящего во внешнем запросе и большой набор результатов, возвращаемых внутренним запросом, когда @startrow - небольшое число, запрос выполняется менее чем за одну секунду, когда это большой номер, для выполнения запроса требуются минуты.
В внутреннем запросе нет нескольких имен. – dinhokz