Partager via


Créer Self-Joins manuellement (Visual Database Tools)

s’applique à : SQL Server

Vous pouvez joindre une table à elle-même même si la table n’a pas de relation réflexive dans la base de données. Par exemple, vous pouvez utiliser une autojointure pour trouver des paires d’auteurs vivant dans la même ville.

Comme pour toute jointure, une jointure automatique nécessite au moins deux tables. La différence est que, au lieu d’ajouter une deuxième table à la requête, vous ajoutez une deuxième instance de la même table. De cette façon, vous pouvez comparer une colonne dans la première instance de la table à la même colonne de la deuxième instance, ce qui vous permet de comparer les valeurs d’une colonne entre elles. Le concepteur de requêtes et de vues attribue un alias à la deuxième instance de la table.

Par exemple, si vous créez une jointure automatique pour rechercher toutes les paires d’auteurs dans Berkeley, vous comparez la colonne city dans la première instance de la table par rapport à la colonne city de la deuxième instance. La requête résultante peut ressembler à ce qui suit :

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'  

La création d’une jointure automatique nécessite souvent plusieurs conditions de jointure. Pour comprendre pourquoi, tenez compte du résultat de la requête précédente :

Cheryl Carson       Cheryl Carson  
   Abraham Bennet      Abraham Bennet  
   Cheryl Carson       Abraham Bennet  
   Abraham Bennet      Cheryl Carson  

La première ligne est inutile ; il indique que Cheryl Carson vit dans la même ville que Cheryl Carson. La deuxième ligne est tout aussi inutile. Pour éliminer ces données inutiles, vous ajoutez une autre condition conservant uniquement les lignes de résultat dans lesquelles les deux noms d’auteur décrivent différents auteurs. La requête résultante peut ressembler à ceci :

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'  

L'ensemble de résultats est amélioré.

Cheryl Carson       Abraham Bennet  
   Abraham Bennet      Cheryl Carson  

Mais les deux lignes de résultat sont redondantes. Le premier dit Carson vit dans la même ville que Bennet, et le second dit que le Bennet vit dans la même ville que Carson. Pour éliminer cette redondance, vous pouvez modifier la deuxième condition de jointure de « non égale » à « inférieure à ». La requête résultante peut ressembler à ceci :

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'  

L'ensemble de résultats ressemble à ceci :

Cheryl Carson       Abraham Bennet  

Pour créer manuellement une jointure automatique

  1. Ajoutez au volet du diagramme la table ou l’objet table avec lequel vous souhaitez travailler.

  2. Ajoutez à nouveau la même table, afin que la fenêtre du diagramme affiche deux fois le même objet ou table de valeurs.

    Le Concepteur de requêtes et de vues attribue un alias à la deuxième instance en ajoutant un numéro séquentiel au nom de la table. En outre, le Concepteur de requêtes et de vues crée une ligne de jointure entre les deux occurrences de la table ou de l’objet à valeur de table dans le volet Diagramme.

  3. Cliquez avec le bouton droit sur la ligne de jointure et choisissez Propriétés dans le menu contextuel.

  4. Dans la fenêtre Propriétés, cliquez sur condition de jointure et tapez, puis cliquez sur les points de suspension (...) à droite de la propriété.

  5. Dans la boîte de dialogue Joindre, modifiez l’opérateur de comparaison entre les clés primaires en fonction des besoins. Par exemple, vous pouvez remplacer l’opérateur par « inférieur à » (<).

  6. Créez la condition de jointure supplémentaire (par exemple, authors.zip = authors1.zip) en faisant glisser le nom de la colonne de jointure principale dans la première occurrence de la table ou de l'objet de type table et en la déposant sur la colonne correspondante dans la deuxième occurrence.

  7. Spécifiez d’autres options pour la requête, telles que les colonnes de sortie, les conditions de recherche et l’ordre de tri.

Voir aussi

Créer automatiquement Self-Joins (Visual Database Tools)
requête avec jointures (Visual Database Tools)