Kwalifikowanie nazwy kolumny podkwerend
W poniższym przykładzie CustomerID kolumna w klauzula WHERE kwerendy zewnętrzne kwalifikuje się niejawnie przez nazwę tabela w zewnętrznej kwerendy z klauzula, Sales.Store.Odniesienie do CustomerID liście select podzapytanie jest kwalifikowana podzapytanie z klauzula, oznacza to, przez Sales.Customer tabela.
USE AdventureWorks2008R2;
GO
SELECT Name
FROM Sales.Store
WHERE BusinessEntityID NOT IN
(SELECT CustomerID
FROM Sales.Customer
WHERE TerritoryID = 5)
Ogólną zasadą jest, że nazwy kolumn w instrukcja są niejawnie kwalifikacje w tabela w klauzula FROM, w tym samym poziom.Jeśli kolumna nie istnieje w tabela w klauzula FROM podzapytanie, jest niejawnie kwalifikacje w tabela w klauzula FROM, zewnętrznej kwerendy.
Oto jak wygląda kwerendy z tych niejawna założenia, określone:
USE AdventureWorks2008R2;
GO
SELECT Name
FROM Sales.Store
WHERE Sales.Store.BusinessEntityID NOT IN
(SELECT Sales.Customer.CustomerID
FROM Sales.Customer
WHERE TerritoryID = 5)
Nigdy nie jest niewłaściwy wyraźnie Nazwa tabela i zawsze jest możliwe zastąpienie niejawna założenia dotyczące nazw tabel z kwalifikacjami jawne.
Przestroga |
---|
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. |