Qualificazione dei nomi delle colonne nelle sottoquery
Nell'esempio seguente la colonna CustomerID specificata nella clausola WHERE della query esterna viene qualificata in modo implicito con il nome della tabella indicato nella clausola FROM della query esterna, ovvero Sales.Store. Il riferimento a CustomerID nell'elenco di selezione della sottoquery viene qualificato dalla clausola FROM della sottoquery stessa, ovvero dalla tabella Sales.Customer.
USE AdventureWorks2008R2;
GO
SELECT Name
FROM Sales.Store
WHERE BusinessEntityID NOT IN
(SELECT CustomerID
FROM Sales.Customer
WHERE TerritoryID = 5)
Come regola generale, i nomi delle colonne inclusi in un'istruzione vengono qualificati in modo implicito dalla tabella cui viene fatto riferimento nella clausola FROM allo stesso livello. Se non è disponibile una colonna nella tabella cui viene fatto riferimento nella clausola FROM di una sottoquery, la colonna viene qualificata in modo implicito dalla tabella cui viene fatto riferimento nella clausola FROM della query esterna.
Di seguito viene riportata una query che include le qualificazioni implicite specificate:
USE AdventureWorks2008R2;
GO
SELECT Name
FROM Sales.Store
WHERE Sales.Store.BusinessEntityID NOT IN
(SELECT Sales.Customer.CustomerID
FROM Sales.Customer
WHERE TerritoryID = 5)
È comunque consigliabile specificare sempre il nome della tabella in modo esplicito. È inoltre sempre possibile sostituire i presupposti impliciti relativi ai nomi delle tabelle con qualificazioni esplicite.
Attenzione |
---|
Se a una colonna viene fatto riferimento in una sottoquery che non è disponibile nella tabella cui viene fatto riferimento nella clausola FROM della sottoquery, ma che è invece disponibile in una tabella cui viene fatto riferimento nella clausola FROM della query esterna, la query viene eseguita senza errori. Tramite SQL Server la colonna viene qualificata in modo implicito nella sottoquery con il nome della tabella indicato nella query esterna. |
Vedere anche