Qualifying Column Names in Subqueries
W poniższym przykładzie CustomerID kolumna w klauzula WHERE kwerendy zewnętrzne kwalifikuje się niejawnie przez nazwę tabela w zewnętrznej kwerendy FROM, Sales.Store. Odwołanie do CustomerID na liście select podkwerenda kwalifikuje się przez jego podkwerenda FROM klauzula, to znaczy przez Sales.Customer Tabela.
USE AdventureWorks;
GO
SELECT Name
FROM Sales.Store
WHERE CustomerID NOT IN
(SELECT CustomerID
FROM Sales.Customer
WHERE TerritoryID = 5)
Ogólną zasadą jest, że kolumna nazw w instrukcja niejawnie są kwalifikowane w tabeli w klauzula FROM na tym samym poziomie.Jeśli kolumna nie tabela, której dotyczy odwołanie w klauzula FROM podkwerenda, jest niejawnie kwalifikowane w tabela w klauzula FROM kwerendy zewnętrzne.
Poniżej opisano, jak wygląda kwerenda z tych niejawna założenia określone:
USE AdventureWorks;
GO
SELECT Name
FROM Sales.Store
WHERE Sales.Store.CustomerID NOT IN
(SELECT Sales.Customer.CustomerID
FROM Sales.Customer
WHERE TerritoryID = 5)
Nigdy nie jest nieprawidłowe określenie nazwy tabela jawnie, i zawsze jest możliwe do zastąpienia niejawna założenia dotyczące nazw tabel z kwalifikacjami jawne.
Ostrzeżenie
If a column is referenced in a subquery that does not exist in the table referenced by the subquery's FROM clause, but exists in a table referenced by the outer query's FROM clause, the query executes without error.SQL Server implicitly qualifies the column in the subquery with the table name in the outer query.
See Also