Maison > base de données > tutoriel mysql > Pourquoi ma jointure extérieure gauche SQL renvoie-t-elle plus de lignes que la table gauche?

Pourquoi ma jointure extérieure gauche SQL renvoie-t-elle plus de lignes que la table gauche?

Linda Hamilton
Libérer: 2025-01-25 01:17:09
original
752 Les gens l'ont consulté

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

Comprendre SQL LEFT OUTER JOIN : pourquoi plus de lignes que la table de gauche ?

Une idée fausse courante à propos de LEFT OUTER JOIN est qu'il renvoie toujours le nombre exact de lignes du tableau de gauche. Bien qu'il inclut toutes les lignes du tableau de gauche, il peut en fait produire plus de lignes s'il y a des correspondances en double dans le tableau de droite.

Illustrons cela avec un exemple :

Considérez cette requête :

SELECT     
    SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID
FROM
    SUSP.Susp_Visits 
LEFT OUTER JOIN
    DATA.Dim_Member ON SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum
Copier après la connexion

Cette requête vise à joindre Susp_Visits (table de gauche) à Dim_Member (table de droite). Intuitivement, on pourrait s'attendre à un maximum de 4935 lignes (en supposant que cela représente Susp_Visits). Cependant, le résultat réel pourrait être plus important.

La raison est qu'un LEFT OUTER JOIN crée une ligne dans l'ensemble de résultats pour chaque correspondance entre les tables de gauche et de droite. Si une seule ligne dans Susp_Visits correspond à plusieurs lignes dans Dim_Member, elle sera dupliquée dans la sortie, ce qui entraînera plus de lignes que prévu initialement.

Par conséquent, un nombre de lignes plus grand que prévu après un LEFT OUTER JOIN indique qu'au moins une ligne dans le tableau de gauche a plusieurs lignes correspondantes dans le tableau de droite en fonction de la condition de jointure.

Pour résoudre ce problème :

  • Vous avez uniquement besoin des données de la table de gauche ? Utilisez simplement une instruction SELECT sur la table de gauche sans aucune jointure.
  • Éliminer les doublons ? Ajoutez une clause DISTINCT à votre instruction SELECT : SELECT DISTINCT SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID ... Cela supprimera les lignes en double de l'ensemble de résultats.

Cela clarifie le comportement de LEFT OUTER JOIN et fournit des solutions pour gérer les situations où l'ensemble de résultats dépasse le nombre de lignes dans le tableau de gauche.

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!

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