Поделиться через


Уточнение имен столбцов во вложенных запросах

В следующем примере столбец CustomerID в предложении WHERE внешнего запроса неявно уточняется именем таблицы Sales.Store, используемой в предложении FROM внешнего запроса. Ссылка на столбец CustomerID в списке выборки вложенного запроса уточняется именем таблицы Sales.Customer с помощью предложения FROM вложенного запроса.

USE AdventureWorks;
GO
SELECT Name
FROM Sales.Store
WHERE CustomerID NOT IN
    (SELECT CustomerID
     FROM Sales.Customer
     WHERE TerritoryID = 5)

Общее правило состоит в том, что имена столбцов в инструкции неявно уточняются именем таблицы, указанной в предложении FROM того же уровня вложенности. Если столбец не существует в таблице, на которую ссылается предложение FROM вложенного запроса, он неявно уточняется именем таблицы, указанной во внешнем запросе.

Вот как выглядит этот запрос с явно указанными неявными соглашениями:

USE AdventureWorks;
GO
SELECT Name
FROM Sales.Store
WHERE Sales.Store.CustomerID NOT IN
    (SELECT Sales.Customer.CustomerID
     FROM Sales.Customer
     WHERE TerritoryID = 5)

Никогда не будет ошибочным явно указать имя таблицы; также всегда можно перекрыть неявные соглашения об именах таблиц полностью уточненными именами столбцов

ПредупреждениеВнимание!

Если столбец, на который есть ссылка во вложенном запросе, не существует в таблице, указанной в предложении FROM вложенного запроса, но существует в таблице, на которую ссылается предложение FROM внешнего запроса, запрос выполнится без ошибок. SQL Server неявно уточнит имя столбца во вложенном запросе с помощью имени таблицы внешнего запроса.