Maison > base de données > tutoriel mysql > Pourquoi ma LEFT OUTER JOIN renvoie-t-elle plus de lignes qu'il n'en existe dans le tableau de gauche ?

Pourquoi ma LEFT OUTER JOIN renvoie-t-elle plus de lignes qu'il n'en existe dans le tableau de gauche ?

Mary-Kate Olsen
Libérer: 2025-01-25 01:22:09
original
984 Les gens l'ont consulté

Why Does My LEFT OUTER JOIN Return More Rows Than Exist in the Left Table?

LEFT OUTER JOIN Comportement inattendu : plus de lignes que la table de gauche

Une idée fausse courante à propos des LEFT OUTER JOIN est que l'ensemble de résultats aura toujours le même nombre de lignes, voire moins, que le tableau de gauche. Cependant, ce n'est pas toujours vrai. Le nombre de lignes peut dépasser le nombre de lignes du tableau de gauche dans des conditions spécifiques.

Ce problème a été observé dans une requête utilisant un LEFT OUTER JOIN entre "SUSP.Susp_Visits" (table de gauche) et "DATA.Dim_Member" (table de droite). Le résultat joint comportait plus de lignes que les 4935 lignes de "SUSP.Susp_Visits".

Comprendre les LEFT OUTER JOINs

Un LEFT OUTER JOIN fonctionne comme suit :

  • Comprend toutes lignes du tableau de gauche.
  • Pour chaque ligne du tableau de gauche, il recherche les lignes correspondantes dans le tableau de droite en fonction de la condition de jointure.
  • Si une correspondance est trouvée, la ligne de droite correspondante du tableau est incluse.
  • Si aucune correspondance n'est trouvée, les valeurs NULL sont renvoyées pour les colonnes de la table de droite.

Pourquoi des lignes supplémentaires apparaissent

Les lignes supplémentaires ne sont pas créées en dupliquant les lignes de gauche du tableau, mais plutôt par la structure du tableau de droite. Le problème survient lorsque plusieurs lignes du tableau de droite ("DATA.Dim_Member") correspondent à une seule ligne du tableau de gauche ("SUSP.Susp_Visits").

Par exemple, si un "MemID" dans "SUSP.Susp_Visits" correspond à plusieurs valeurs "MembershipNum" dans "DATA.Dim_Member", le JOIN produira plusieurs lignes de sortie pour cette seule ligne de gauche du tableau, augmentant ainsi la ligne globale. compter.

Solutions

Pour éviter cette inflation de ligne dans un LEFT OUTER JOIN :

  • Restreindre la sélection : Sélectionnez uniquement les colonnes du tableau de gauche. Cela garantit que le nombre de lignes en sortie ne dépassera pas le nombre de lignes de la table de gauche.
  • Utilisez INNER JOIN : Si vous n'avez besoin que de lignes où une correspondance existe entre les deux tables, un INNER JOIN est plus approprié. Cela éliminera les lignes supplémentaires causées par plusieurs correspondances sur le côté droit.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal