Уточнение имен столбцов во вложенных запросах
В следующем примере столбец 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 неявно уточнит имя столбца во вложенном запросе с помощью имени таблицы внешнего запроса. |
См. также