Использовать псевдоним в запросе выбора

#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)