Вложенный оператор select в SQL Server

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

SELECT name FROM (SELECT name FROM agentinformation)

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

SELECT name FROM agentinformation

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

Ответ 1

Вам нужен псевдоним подзапроса.

SELECT name FROM (SELECT name FROM agentinformation) a  

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

SELECT a.name FROM (SELECT name FROM agentinformation) a  

Ответ 2

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

SELECT name FROM (SELECT name FROM agentinformation) as a  

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

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

  • выражение WHERE [NOT] IN (подзапрос)
  • ГДЕ выражение compare_operator [ЛЮБОЕ | ALL] (подзапрос)
  • ГДЕ [NOT] EXISTS (подзапрос)

Проверить дополнительные правила подзапроса и типы подзапросов.

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

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

  • ЛЮБОЙ - [ > ЛЮБОЙ ИЛИ ЛЮБОЙ оператор принимает список значений, создаваемых внутренним запросом, и извлекает все значения, которые больше минимального значения списка.

например. > ANY (100,200,300), оператор ANY будет извлекать все значения, превышающие 100.

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

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

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