Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Você pode unir uma tabela a si mesma, mesmo que a tabela não tenha uma relação reflexiva no banco de dados. Por exemplo, pode-se usar uma autojunção para encontrar pares de autores que vivem na mesma cidade.
Tal como acontece com qualquer junção, uma auto-junção requer pelo menos duas tabelas. A diferença é que, em vez de adicionar uma segunda tabela à consulta, você adiciona uma segunda instância da mesma tabela. Dessa forma, você pode comparar uma coluna na primeira instância da tabela com a mesma coluna na segunda instância, o que permite comparar os valores em uma coluna entre si. As Ferramentas de Designer de Consulta e Exibição (Visual Database Tools) atribuem um alias à segunda instância da tabela.
Por exemplo, se você estiver criando uma associação automática para encontrar todos os pares de autores em Berkeley, você compara a city coluna na primeira instância da tabela com a city coluna na segunda instância. A consulta resultante pode ter a seguinte aparência:
SELECT authors.au_fname,
authors.au_lname,
authors1.au_fname AS Expr2,
authors1.au_lname AS Expr3
FROM authors
INNER JOIN authors AS authors1
ON authors.city = authors1.city
WHERE authors.city = 'Berkeley';
A criação de uma auto-junção muitas vezes requer várias condições de junção. Para entender o porquê, considere o resultado da consulta anterior:
Cheryl Carson Cheryl Carson
Abraham Bennet Abraham Bennet
Cheryl Carson Abraham Bennet
Abraham Bennet Cheryl Carson
A primeira fila é inútil; indica que Cheryl Carson vive na mesma cidade que Cheryl Carson. A segunda linha é igualmente inútil. Para eliminar esses dados inúteis, você adiciona outra condição mantendo apenas as linhas de resultados nas quais os dois nomes de autores descrevem autores diferentes. A consulta resultante pode ter esta aparência:
SELECT authors.au_fname,
authors.au_lname,
authors1.au_fname AS Expr2,
authors1.au_lname AS Expr3
FROM authors
INNER JOIN authors AS authors1
ON authors.city = authors1.city
AND authors.au_id <> authors1.au_id
WHERE authors.city = 'Berkeley';
O conjunto de resultados é melhorado:
Cheryl Carson Abraham Bennet
Abraham Bennet Cheryl Carson
Mas as duas linhas de resultados são redundantes. O primeiro diz que Carson vive na mesma cidade que Bennet, e o segundo diz que o Bennet vive na mesma cidade que Carson. Para eliminar essa redundância, você pode alterar a segunda condição de junção de "não igual" para "menos que". A consulta resultante pode ter esta aparência:
SELECT authors.au_fname,
authors.au_lname,
authors1.au_fname AS Expr2,
authors1.au_lname AS Expr3
FROM authors
INNER JOIN authors AS authors1
ON authors.city = authors1.city
AND authors.au_id < authors1.au_id
WHERE authors.city = 'Berkeley';
E o conjunto de resultados tem esta aparência:
Cheryl Carson Abraham Bennet
Criar uma associação automática manualmente
Adicione ao painel Diagrama (Visual Database Tools) a tabela ou objeto com valor de tabela com o qual você deseja trabalhar.
Adicione a mesma tabela novamente, para que o painel Diagrama mostre a mesma tabela ou objeto com valor de tabela duas vezes no painel Diagrama.
O Designer de Consulta e Exibição atribui um alias à segunda instância adicionando um número sequencial ao nome da tabela. Além disso, o Designer de Consulta e Exibição cria uma linha de junção entre as duas ocorrências da tabela ou do objeto com valor de tabela no painel Diagrama.
Clique com o botão direito do mouse na linha de junção e escolha Propriedades no menu de atalho.
Na janela Propriedades, selecione Juntar, Condição e Tipo e selecione as reticências (...) à direita da propriedade.
Na caixa de diálogo Associar, altere o operador de comparação entre as chaves primárias conforme necessário. Por exemplo, você pode alterar o operador para menos de (<).
Crie a condição de junção adicional (por exemplo, authors.zip = authors1.zip) arrastando o nome da coluna de junção primária na primeira ocorrência da tabela ou objeto com valor de tabela e soltando-a na coluna correspondente na segunda ocorrência.
Especifique outras opções para a consulta, como colunas de saída, condições de pesquisa e ordem de classificação.