Résultats par défaut pour la gestion des valeurs IN manquantes dans les requêtes SQL
En SQL, la requête IN est utilisée pour filtrer les lignes en fonction d'un ensemble de valeurs. Cependant, lorsqu'il est utilisé pour des requêtes dynamiques, il peut être nécessaire de gérer la situation dans laquelle certaines valeurs de la liste IN peuvent ne pas avoir d'enregistrements correspondants dans la base de données. Cela entraîne des lignes vides pour ces valeurs, ce qui affecte le traitement ultérieur ou l'affichage des données.
Pour résoudre ce problème, pensez à réécrire la requête en utilisant LEFT JOIN. En déplaçant la condition de la clause WHERE vers la clause ON de LEFT JOIN (comme indiqué dans l'exemple de code fourni), vous pouvez vous assurer que toutes les valeurs de la liste IN sont incluses dans le jeu de résultats. En effet, LEFT JOIN renvoie toutes les lignes du tableau de gauche, même s'il n'y a aucune ligne correspondante dans le tableau de droite.
Exemple :
Considérez la requête simplifiée suivante :
<code class="language-sql">SELECT Name, ID, SUM(Minutes) AS MinutesOnline FROM UserTable LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID WHERE UserTable.ID IN (332, 554, 5764, 11, 556, ...)</code>
Dans cette requête, la condition OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date
est omise, par souci d'exhaustivité nous devrions l'inclure dans la condition JOIN.
La requête améliorée est la suivante :
<code class="language-sql">SELECT Name, ID, IFNULL(SUM(Minutes), 0) AS MinutesOnline FROM UserTable LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID AND OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date < CURRENT_TIMESTAMP WHERE UserTable.ID IN (332, 554, 5764, 11, 556, ...)</code>
Maintenant, pour toute valeur de la liste IN qui n'a pas d'enregistrement correspondant dans la table OnlineUseage
, LEFT JOIN renverra une valeur NULL pour la colonne correspondante. La valeur NULL peut ensuite être remplacée par la valeur par défaut (0 dans ce cas) à l'aide de la fonction IFNULL.
Cette approche garantit que toutes les valeurs de la liste IN sont incluses dans l'ensemble de résultats et attribue des valeurs par défaut appropriées aux valeurs qui ne répondent pas aux critères spécifiés. Veuillez noter que CURRENT_TIMESTAMP
est utilisé pour remplacer le <p>Now
ambigu dans le texte original afin de garantir une exécution correcte de la requête.
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!