Maison >base de données >tutoriel mysql >Pourquoi ma jointure externe gauche renvoie-t-elle plus d'enregistrements que la table de gauche ?

Pourquoi ma jointure externe gauche renvoie-t-elle plus d'enregistrements que la table de gauche ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-25 01:11:08141parcourir

Why Does My Left Outer Join Return More Records Than the Left Table?

Jointures extérieures gauche et comptes de lignes inattendus: un look plus étroit

Dans les bases de données SQL, une jointure extérieure gauche combine les données de deux tables, garantissant l'inclusion de toutes les lignes de la table gauche dans l'ensemble de résultats. Cependant, une idée fausse commune est que la sortie sera toujours avoir le même nombre de lignes que la table gauche. Ce n'est pas nécessairement vrai.

Le comportement d'une jointure extérieure gauche est de faire correspondre chaque ligne de la table gauche avec des lignes correspondantes dans la table droite. Si une correspondance est trouvée, les données des deux tables sont combinées en une seule ligne. Surtout, si aucune correspondance se trouve dans la table droite pour une ligne donnée dans la table de gauche, cette ligne de table gauche est toujours incluse dans le résultat, mais avec NULL pour les colonnes du tableau droit .

L'écart survient lorsque une seule ligne dans la table gauche correspond à multiple lignes dans la table droite. Dans ce cas, la jointure extérieure gauche générera plusieurs lignes dans la sortie, une pour chaque match sur le côté droit, conduisant à un nombre de lignes dépassant celui de la table gauche d'origine.

illustrons avec un exemple de requête SQL:

<code class="language-sql">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</code>

Cette requête a l'intention de récupérer des données uniquement à partir de SUSP.Susp_Visits. Cependant, si A MemID dans SUSP.Susp_Visits correspond à plusieurs entrées dans DATA.Dim_Member, le résultat contiendra plusieurs lignes pour chacune de telles lignes SUSP.Susp_Visits.

Pour éviter ce nombre de lignes gonflé et récupérer uniquement les données de la table gauche, une requête plus simple est préférable:

<code class="language-sql">SELECT     
    SuspReason, SiteID
FROM
    SUSP.Susp_Visits</code>

Cette requête directe récupère efficacement les données souhaitées sans le potentiel de divergences de comptage de lignes inhérentes au comportement de la jointure extérieure gauche lorsqu'ils traitent des relations un-à-plusieurs entre les tableaux.

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:
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