Compartilhar via


Usando autojunções

Uma tabela pode ser unida a si mesma em uma autojunção. Use uma autojunção quando quiser criar um conjunto de resultados que una registros em uma tabela com outros registros na mesma tabela. Para listar uma tabela duas vezes na mesma consulta, você deve fornecer um alias de tabela para pelo menos uma instância do nome de tabela. Esse alias de tabela ajuda o processador de consultas a determinar se as colunas devem ou não apresentar dados da versão direita ou esquerda da tabela.

Exemplos

A. Usando uma autojunção para localizar os produtos fornecidos por vários fornecedores

O exemplo a seguir utiliza uma autojunção para localizar os produtos fornecidos por mais de um fornecedor.

Como esta consulta envolve uma junção da tabela ProductVendor com ela própria, a tabela ProductVendor aparece em duas funções. Para distinguir as duas funções, você deve dar à tabela ProductVendor dois aliases diferentes (pv1 e pv2) na cláusula FROM. Esses aliases são usados para qualificar os nomes de colunas no restante da consulta. Este é um exemplo da instrução de autojunção Transact-SQL:

USE AdventureWorks;
GO
SELECT DISTINCT pv1.ProductID, pv1.VendorID
FROM Purchasing.ProductVendor pv1
    INNER JOIN Purchasing.ProductVendor pv2
        ON pv1.ProductID = pv2.ProductID
        AND pv1.VendorID <> pv2.VendorID
ORDER BY pv1.ProductID

B. Usando uma autojunção para estabelecer uma correspondência entre os funcionários e seus gerentes

O exemplo a seguir executa uma autojunção da tabela HumanResources.Employee para gerar uma lista de todos os gerentes e os funcionários subordinados a eles.

SELECT MgrTable.LoginID AS ManagerName,EmplTable.ManagerID, 
    EmplTable.LoginID, EmplTable.EmployeeID
FROM HumanResources.Employee AS EmplTable
    JOIN HumanResources.Employee AS MgrTable
        ON EmplTable.ManagerID = MgrTable.EmployeeID
ORDER BY MgrTable.LoginID, EmplTable.LoginID