Maison >base de données >tutoriel mysql >Pourquoi ma jointure externe gauche ne renvoie-t-elle que des données partielles de la table de gauche ?

Pourquoi ma jointure externe gauche ne renvoie-t-elle que des données partielles de la table de gauche ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-23 16:08:10429parcourir

Why Does My Left Outer Join Only Return Partial Data From the Left Table?

Jointures externes gauches et données incomplètes de la table de gauche

Comprendre comment les conditions de jointure affectent les résultats d'une jointure externe gauche est essentiel. Des conditions mal placées peuvent entraîner des données incomplètes dans le tableau de gauche.

Examinons cette requête :

<code class="language-sql">SELECT day.days, COUNT(*) AS opens
FROM day
LEFT OUTER JOIN tracking
ON day.days = DAY(FROM_UNIXTIME(open_date))
WHERE tracking.open_id = 10
GROUP BY day.days;</code>

Cette requête vise à compter les pages ouvertes quotidiennement. Cependant, il se peut qu'il n'affiche que quelques jours, même si le tableau day en contient beaucoup plus. Le problème réside dans la clause WHERE.

La condition de jointure ON day.days = DAY(FROM_UNIXTIME(open_date)) correspond correctement aux jours. Mais, WHERE tracking.open_id = 10 filtre après la jointure, en supprimant tous les jours sans open_id = 10 dans la table tracking.

Pour inclure tous jours du tableau de gauche (day), quelles que soient les correspondances dans tracking, déplacez la condition open_id dans la clause ON :

<code class="language-sql">SELECT day.days, COUNT(*) AS opens
FROM day
LEFT OUTER JOIN tracking
ON day.days = DAY(FROM_UNIXTIME(open_date)) AND tracking.open_id = 10
GROUP BY day.days;</code>

Cette requête corrigée garantit que tous les jours sont inclus, fournissant un nombre quotidien complet de pages ouvertes, même si certains jours manquent d'entrées dans la table tracking avec open_id = 10. Le COUNT(*) renverra 0 pour ces jours.

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