Подчиненные запросы с псевдонимами
Многие инструкции, где вложенный и внешний запросы ссылаются на одну и ту же таблицу, могут быть переформулированы как самосоединения (соединения таблицы с самой собой). Например найти сотрудников, подчиняющихся тому же менеджеру, что и Терри Даффи (Terri Duffy), можно с помощью такого вложенного запроса:
USE AdventureWorks;
GO
SELECT EmployeeID, ManagerID
FROM HumanResources.Employee
WHERE ManagerID IN
(SELECT ManagerID
FROM HumanResources.Employee
WHERE EmployeeID = 12)
Ниже приводится результирующий набор.
EmployeeID ManagerID
----------- -----------
6 109
12 109
21 109
42 109
140 109
148 109
273 109
(7 row(s) affected)
Можно также использовать самосоединение:
USE AdventureWorks;
GO
SELECT e1.EmployeeID, e1.ManagerID
FROM HumanResources.Employee AS e1
INNER JOIN HumanResources.Employee AS e2
ON e1.ManagerID = e2.ManagerID
AND e2.EmployeeID = 12
Псевдонимы таблиц здесь необходимы, так как соединенная сама с собой таблица выступает в двух ролях. Псевдонимы можно также использовать во вложенных запросах, где и внешний, и внутренний запросы ссылаются на одну и ту же таблицу.
USE AdventureWorks;
GO
SELECT e1.EmployeeID, e1.ManagerID
FROM HumanResources.Employee AS e1
WHERE e1.ManagerID IN
(SELECT e2.ManagerID
FROM HumanResources.Employee AS e2
WHERE e2.EmployeeID = 12)
При использовании явных псевдонимов понятно, что ссылка на HumanResources.Employee
во вложенном запросе означает не то же, что и ссылка во внешнем.