Maison > Article > base de données > Exemples d'utilisation avancée de jointure-auto-jointure mysql
Auto-jointure
Comme mentionné précédemment, l'une des principales raisons d'utiliser des alias de table est de pouvoir référencer la même table plus d'une fois dans une seule instruction SELECT. Voici un exemple.
Supposons que vous rencontriez un problème avec un article (dont l'ID est DTNTR ) et que vous souhaitiez savoir si d'autres articles produits par le fournisseur qui produit cet article ont également ces problèmes. Cette requête nécessite d'abord de trouver
le fournisseur qui produit l'article avec l'ID DTNTR, puis de trouver d'autres articles produits par ce fournisseur.
Voici une façon de résoudre ce problème :
Entrée :
select prod_id,prod_name from products where vend_id = (select vend_id from products where prod_id = 'DTNTR');
Sortie :
Analyse : C'est la première solution qui utilise des sous-requêtes. L'instruction SELECT interne effectue une recherche simple et renvoie le vend_id du fournisseur d'articles dont l'ID de production est DTNTR. Cet identifiant est utilisé dans la clause WHERE de la requête externe pour récupérer tous les articles produits par ce fournisseur.
Regardez maintenant la même requête en utilisant les jointures :
Entrée :
Sortie :select p1.prod_id,p1.prod_name from products as p1,products as p2 where p1.vend_id = p2.vend_id and p2.prod_id = 'DTNTR';Analyse : Les deux tables requises dans cette requête sont en fait la même table, donc la table products apparaît deux fois dans la clause FROM. Bien que cela soit parfaitement légal, la référence aux produits est ambiguë car MySQL ne sait pas à quelle instance de la table products vous faites référence.
Pour résoudre ce problème, des alias de table sont utilisés. La première occurrence de products est l'alias p1 et la deuxième occurrence est l'alias p2 . Ces alias peuvent désormais être utilisés comme noms de table. Par exemple, une instruction SELECT utilise le préfixe p1 pour donner explicitement le nom complet de la colonne requise. Sinon, MySQL renverra une erreur car il y a deux colonnes nommées respectivement prod_id et prod_name. MySQL ne sait pas quelle colonne est souhaitée (même s'il s'agit en fait de la même colonne). WHERE (en faisant correspondre vend_id dans p1 et vend_id dans p2) joint d'abord les deux tables, puis filtre les données par prod_id dans la deuxième table, renvoyant les données requises.
Utilisez des auto-jointures au lieu de sous-requêtes. Les auto-jointures sont souvent utilisées comme instructions externes pour remplacer les instructions de sous-requête utilisées lors de la récupération de données de la même table. Bien que le résultat final soit le même, le traitement des jointures est parfois beaucoup plus rapide que le traitement des sous-requêtes. Vous devriez essayer les deux méthodes pour déterminer laquelle est la plus performante.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!