Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
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. Les outils de concepteur de requêtes et de vues (Visual Database Tools) attribuent 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 city colonne dans la première instance de la table par rapport à la city colonne 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 AS 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 AS 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 AS 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
Créer une jointure automatiquement
Ajoutez au volet Diagramme (Visual Database Tools) la table ou l'objet de type table avec lequel vous souhaitez travailler.
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.
Cliquez avec le bouton droit sur la ligne de jointure et choisissez Propriétés dans le menu contextuel.
Dans la fenêtre Propriétés, sélectionnez Condition de jointure et Type, puis sélectionnez les points de suspension (...) à droite de la propriété.
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 à » (<).
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.
Spécifiez d’autres options pour la requête, telles que les colonnes de sortie, les conditions de recherche et l’ordre de tri.