Maison >base de données >tutoriel mysql >Pourquoi mon LEFT OUTER JOIN ne fonctionne-t-il pas avec les filtres de date dans la clause WHERE ?

Pourquoi mon LEFT OUTER JOIN ne fonctionne-t-il pas avec les filtres de date dans la clause WHERE ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-17 14:27:10611parcourir

Why Doesn't My LEFT OUTER JOIN Work with Date Filters in the WHERE Clause?

Débogage d'un LEFT OUTER JOIN défaillant avec filtrage par date

Un défi courant en matière de requête SQL consiste à utiliser LEFT OUTER JOIN avec des filtres de date. L'on s'attend à ce que les données de la table de gauche (par exemple, Salesrep) soient renvoyées même s'il n'y a pas de données correspondantes dans les tables de droite (Prescriber et Prescriptions). Cependant, l'ajout de filtres de date à la clause WHERE peut filtrer de manière inattendue les enregistrements de la table de gauche.

Comprendre le problème :

Le problème vient de la localisation des conditions de plage de dates. Les placer dans la clause WHERE filtre incorrectement les résultats après la jointure, supprimant ainsi les lignes du tableau de gauche qui manquent d'entrées correspondantes dans la plage de dates spécifiée.

La bonne approche :

Pour maintenir l'intégrité du LEFT OUTER JOIN, les critères de plage de dates doivent être incorporés dans la clause ON de la jointure elle-même. Cela garantit que le filtrage se produit pendant la jointure, préservant tous les enregistrements de la table de gauche, quelles que soient les prescriptions correspondantes dans la plage de dates.

Requête révisée :

<code class="language-sql">LEFT OUTER JOIN prescriptions ON prescriber.dea_no = prescriptions.dea_no
                             AND prescriptions.filldate >= '09-01-12'
                             AND prescriptions.filldate <= '09-30-12'</code>

En déplaçant les filtres de date vers la clause ON, la requête renvoie avec précision toutes les données de la table Salesrep, y compris les représentants commerciaux sans ordonnance dans le délai spécifié. Cela implémente correctement le comportement attendu d'un LEFT OUTER JOIN.

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