Partilhar via


Criar associações automáticas manualmente (Visual Database Tools)

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

  1. Adicione ao painel Diagrama (Visual Database Tools) a tabela ou objeto com valor de tabela com o qual você deseja trabalhar.

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

  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, selecione Juntar, Condição e Tipo e selecione as reticências (...) à direita da propriedade.

  5. 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 (<).

  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.