Вложенный оператор выбора в SQL Server - PullRequest
343 голосов
/ 07 января 2011

Почему не работает следующее?

SELECT name FROM (SELECT name FROM agentinformation)

Я полагаю, что мое понимание SQL неверно, потому что я думал, что это вернет то же самое, что и

SELECT name FROM agentinformation

Разве внутренний оператор выбора не создает результирующий набор, который затем запрашивает внешний оператор SELECT?

Ответы [ 2 ]

599 голосов
/ 07 января 2011

Вам необходимо создать псевдоним подзапроса.

SELECT name FROM (SELECT name FROM agentinformation) a  

или, чтобы быть более явным

SELECT a.name FROM (SELECT name FROM agentinformation) a  
37 голосов
/ 16 сентября 2016

Ответ , предоставленный Джо Стефанелли, уже правильный.

SELECT name FROM (SELECT name FROM agentinformation) as a  

Нам нужно создать псевдоним подзапроса, потому что для запроса нужен табличный объект, который мы получим от создания псевдонима подзапроса. Концептуально результаты подзапроса подставляются во внешний запрос. Поскольку нам нужен табличный объект во внешнем запросе, нам нужно создать псевдоним внутреннего запроса.

Операторы, которые включают подзапрос, обычно принимают один из следующих форматов:

  • ГДЕ выражение [NOT] IN (подзапрос)
  • ГДЕ выражение сравнения_оператор [ЛЮБОЙ | ALL] (подзапрос)
  • ГДЕ [НЕ] СУЩЕСТВУЕТ (подзапрос)

Проверьте больше правил подзапроса и типов подзапросов .

Дополнительные примеры вложенного подзапроса.

  1. IN / NOT IN - этот оператор принимает вывод внутреннего запроса после выполнения внутреннего запроса, который может иметь ноль или более значений, и отправляет его во внешний запрос. Затем внешний запрос извлекает все соответствующие строки [оператор IN] или не совпадает [оператор NOT IN].

  2. ANY - [> ANY или ANY оператор берет список значений, созданных внутренним запросом, и извлекает все значения, которые больше минимального значения списка.

например. > ЛЮБОЙ (100,200,300), ЛЮБОЙ оператор извлекает все значения больше 100.

  1. ALL - [> ALL или ALL оператор берет список значений, созданных внутренним запросом, и извлекает все значения, которые больше максимума списка.

например. > ALL (100 200 300), оператор ALL извлечет все значения больше 300.

  1. EXISTS - Ключевое слово EXISTS создает логическое значение [TRUE / FALSE]. Это EXISTS проверяет существование строк, возвращаемых подзапросом.
...