Compartilhar via


Criar Self-Joins manualmente (Ferramentas Visuais de Banco de Dados)

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.

Assim 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. O designer de consulta e exibição atribui 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 coluna city na primeira instância da tabela com a coluna city 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 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 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 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  

Para criar uma auto associação manualmente

  1. Adicione a tabela ou o objeto com valor de tabela com o qual você deseja trabalhar ao painel Diagrama .

  2. 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.

  3. Clique com o botão direito do mouse na linha de junção e escolha Propriedades no menu de atalho.

  4. Na janela Propriedades, clique em Condição e Tipo de Junção e clique nas reticências (...) à direita da propriedade.

  5. Na caixa de diálogo Junção , altere o operador de comparação entre as chaves primárias conforme requerido. Por exemplo, você pode alterar o operador para menor que (<).

  6. 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.

  7. Especifique outras opções para a consulta, como colunas de saída, condições de pesquisa e ordem de classificação.

Consulte Também

Criar Self-Joins Automaticamente (Visual Database Tools)
Consultar com junções (Ferramentas de Banco de Dados Visual)