Maison >base de données >tutoriel mysql >Pourquoi ma jointure externe gauche renvoie-t-elle plus d'enregistrements que la table de gauche ?
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!