Maison > base de données > tutoriel mysql > Pourquoi mes deux SQL LEFT JOINS renvoient-ils un nombre de visites incorrect ?

Pourquoi mes deux SQL LEFT JOINS renvoient-ils un nombre de visites incorrect ?

Barbara Streisand
Libérer: 2025-01-23 12:27:10
original
261 Les gens l'ont consulté

Why Are My Two SQL LEFT JOINS Returning Incorrect Visit Counts?

Débogage des LEFT JOIN SQL : nombre de visites précis

Un problème courant survient lors de l'utilisation de plusieurs LEFT JOIN en SQL pour compter les visites dans différentes tables. Cet exemple utilise trois tables : users, grocery et fishmarket. Une requête conçue pour compter les visites de chaque utilisateur dans les épiceries et les poissonneries produit des résultats inexacts.

Le problème vient de la nature séquentielle des jointures. Une approche naïve rejoint users et grocery en premier, créant une ligne pour chaque utilisateur avec un account_balance non nul et ses visites à l'épicerie. La jointure suivante avec fishmarket multiplie ensuite de manière incorrecte le nombre de visites à l'épicerie par le nombre de visites à la poissonnerie pour chaque utilisateur. Cela conduit à des totaux de visites gonflés.

La solution consiste à restructurer la requête pour agréger le nombre de visites avant de les joindre à la table users. Ceci est accompli efficacement à l’aide de deux sous-requêtes corrélées. Chaque sous-requête compte indépendamment les visites pour la table grocery ou fishmarket, regroupées par user_id. Ces décomptes agrégés sont ensuite joints au tableau users, garantissant des totaux de visites précis.

Voici la requête corrigée utilisant des sous-requêtes :

<code class="language-sql">SELECT u.id, u.account_balance, g.grocery_visits, f.fishmarket_visits
FROM users u
LEFT JOIN (
    SELECT user_id, COUNT(*) AS grocery_visits
    FROM grocery
    GROUP BY user_id
) g ON g.user_id = u.id
LEFT JOIN (
    SELECT user_id, COUNT(*) AS fishmarket_visits
    FROM fishmarket
    GROUP BY user_id
) f ON f.user_id = u.id
ORDER BY u.id;</code>
Copier après la connexion

Cette requête révisée fournit un décompte précis et indépendant des visites à l'épicerie et au marché aux poissons pour chaque utilisateur, résolvant ainsi l'erreur de multiplication de la requête d'origine.

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