Share 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 do Transact-SQL:

USE AdventureWorks2008R2;
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 de vendas e seus territórios

O exemplo a seguir executa uma autojunção da tabela Sales.SalesPerson para gerar uma lista de todos os territórios e funcionários de vendas que trabalham neles.

SELECT st.Name AS TerritoryName, sp.BusinessEntityID, 
    sp.SalesQuota, sp.SalesYTD
FROM Sales.SalesPerson AS sp
    JOIN Sales.SalesTerritory AS st
        ON sp.TerritoryID = st.TerritoryID
ORDER BY st.Name, sp.BusinessEntityID