Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Você pode unir uma tabela a si mesma mesmo se a tabela não tiver uma relação reflexiva no banco de dados. Por exemplo, você pode usar uma autojunção para encontrar pares de autores que moram na mesma cidade.
Como em qualquer junção, uma autojunçã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 autojunção para encontrar todos os pares de autores em Berkeley, compare a city coluna na primeira instância da tabela com a city coluna na segunda instância. A consulta resultante pode ser semelhante à seguinte:
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 autojunção geralmente 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 linha é 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 retendo apenas as linhas de resultado nas quais os dois nomes de autor 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 foi aprimorado:
Cheryl Carson Abraham Bennet
Abraham Bennet Cheryl Carson
Mas as duas linhas de resultado 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 "menor 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 auto-junção 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, de modo que o painel Diagrama mostre a mesma tabela ou objeto com valor de tabela duas vezes dentro do 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 objeto com valor de tabela dentro do 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 Condição e Tipo de Junção e selecione as reticências (...) à direita da propriedade.
Na caixa de diálogo de Junção, altere o operador de comparação entre as chaves primárias conforme necessário. Por exemplo, você pode alterar o operador para menor que (<).
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.