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
Libérer: 2025-01-17 14:27:10
original
565 Les gens l'ont consulté

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>
Copier après la connexion

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!

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