Partager via


Comment : créer manuellement des jointures réflexives

Vous pouvez joindre une table à elle-même même si elle ne possède pas de relation réflexive dans la base de données. Vous pouvez, par exemple, utiliser une jointure réflexive pour trouver des paires d'auteurs vivant dans la même ville.

À l'instar de toute autre jointure, une jointure réflexive nécessite au moins deux tables. En revanche, elle diffère des autres jointures par le fait que vous ajoutez une seconde instance de la même table plutôt qu'une autre table à la requête. Ainsi, vous pouvez comparer une colonne de la première instance de la table à la même colonne de la seconde, ce qui vous permet de comparer les valeurs d'une même colonne. Le Concepteur de requêtes et de vues assigne un alias à la seconde instance de la table.

Par exemple, si vous créez une jointure réflexive pour trouver toutes les paires d'auteurs résidant à Berkeley, comparez la colonne city de la première instance de la table à la colonne city de la seconde instance. La requête obtenue peut se présenter comme 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 réflexive exige souvent plusieurs conditions de jointure. Pour en comprendre les raisons, observez le 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 sans importance, elle indique que Cheryl Carson vit dans la même ville que Cheryl Carson. La deuxième est tout aussi inutile. Pour éliminer les données inutiles, ajoutez une autre condition afin de ne conserver que les lignes de résultats affichant des noms d'auteur différents. La requête obtenue peut se présenter comme 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
               AND authors.au_id
                <> authors1.au_id
      WHERE
         authors.city = 'Berkeley'

Le jeu de résultats est affiné :

   Cheryl Carson       Abraham Bennet
   Abraham Bennet      Cheryl Carson

Néanmoins, les deux lignes de résultats sont redondantes. La première indique que Carson vit dans la même ville que Bennet et la seconde que Bennet vit dans la même ville que Carson. Pour éliminer cette redondance, vous pouvez modifier la seconde condition de jointure « n'est pas égal à » en « inférieur à ». La requête obtenue peut se présenter comme 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
               AND authors.au_id
                < authors1.au_id
      WHERE
         authors.city = 'Berkeley'

Le jeu de résultat ressemble alors à ceci :

   Cheryl Carson       Abraham Bennet

Notes

Il est possible que pour certains des éléments de l'interface utilisateur de Visual Studio, votre ordinateur affiche des noms ou des emplacements différents de ceux indiqués dans les instructions suivantes. L'édition de Visual Studio dont vous disposez et les paramètres que vous utilisez déterminent ces éléments. Pour plus d'informations, consultez Paramètres Visual Studio.

Pour créer manuellement une jointure réflexive

  1. Ajoutez la table ou l'objet table que vous souhaitez utiliser dans le volet Schéma.

  2. Ajoutez de nouveau la même table, afin que le volet Schéma affiche deux fois la même table ou objet table.

    Le Concepteur de requêtes et de vues assigne un alias à la seconde instance en ajoutant un numéro séquentiel au nom de la table. Par ailleurs, il crée une ligne de jointure entre les deux occurrences de la table ou l'objet table dans le volet Schéma.

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

  4. Dans la fenêtre Propriétés, cliquez sur Condition et type de jointure et cliquez sur le bouton de sélection (...), à droite de la propriété.

  5. Dans la boîte de dialogue Joindre, modifiez éventuellement l'opérateur de comparaison entre les clés primaires. Modifiez par exemple l'opérateur en 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 primaire figurant dans la première occurrence de la table ou de l'objet table jusqu'à la colonne correspondante de la seconde occurrence.

  7. Spécifiez d'autres options de requête comme les colonnes de sortie, les conditions de recherche et l'ordre de tri.

Voir aussi

Tâches

Comment : créer automatiquement des jointures réflexives

Autres ressources

Interrogation avec des jointures