#sql #sql-server #oracle
#sql #sql-сервер #Oracle
Вопрос:
Мне нужно спросить, как можно использовать псевдоним в запросе выбора,
Мне нужно это
SELECT (Complex SubQuery) AS A, (Another Sub Query WHERE ID = A) FROM TABLE
Комментарии:
1. Я подозреваю, что ответ заключается в том, чтобы изменить ваше
Complex SubQuery
скалярное выражение на табличное выражение, но трудно отлаживать код, который мы не видим.2. Я согласен с вами. Мне нужно сделать этот запрос эффективным.
Ответ №1:
Вы не можете этого сделать:
SELECT (Complex SubQuery) AS A, (Another Sub Query WHERE ID = A) FROM TABLE
Однако вы можете сделать это:
SELECT (Another Sub Query WHERE ID = A.somecolumn)
FROM table
JOIN SELECT (Complex SubQuery) AS A on (A.X = TABLE.Y)
Или
SELECT (Another Sub Query)
FROM table
WHERE table.afield IN (SELECT Complex SubQuery.otherfield)
Проблема в том, что вы не можете ссылаться на подобные псевдонимы в предложениях SELECT и WHERE, потому что они не будут оценены к моменту выполнения части select или where .
Вы также можете использовать having
предложение, но предложения having не используют индексы, и их следует избегать, если это возможно.
Комментарии:
1. ?? Возможно, вы имели в виду:
WHERE ID = A.SomeColumn
2. Вы (и OP) используете
A
как псевдоним таблицы и как псевдоним столбца (в разных местах).
Ответ №2:
Вы можете переписать свой запрос следующим образом
SELECT Complex.A, (Another Sub Query WHERE ID = Complex.A)
FROM TABLE
CROSS JOIN ((Complex SubQuery) AS A) Complex
Ответ №3:
Другое решение, которое вы можете использовать:
SELECT (Complex SubQuery) AS A, (Another Sub Query WHERE ID = A)
FROM
TABLE MAIN
OUTER APPLY (SELECT (Complex SubQuery) AS A)