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!