Récupération des valeurs par défaut des identifiants manquants dans les requêtes de clause SQL IN
Cet article aborde un défi courant en matière de requête SQL : récupérer des données pour des ID spécifiés, y compris les valeurs par défaut lorsqu'un ID n'est pas trouvé dans la table associée. Le scénario implique de récupérer les données d'activité des utilisateurs dans une plage de dates, à l'aide d'une clause IN
pour filtrer par ID utilisateur. Cependant, la requête d'origine omet les utilisateurs sans activité dans le délai spécifié.
Le problème vient du fait que LEFT JOIN
de la requête se comporte comme un INNER JOIN
en raison des conditions appliquées à la table jointe (OnlineUseage
). Cela filtre efficacement les identifiants non présents dans OnlineUseage
pendant la plage de dates spécifiée.
La solution consiste à déplacer la condition de plage de dates de la clause JOIN
vers la clause WHERE
. Cela permet au LEFT JOIN
de fonctionner correctement, y compris tous les identifiants de la table users
. Les identifiants sans entrées correspondantes dans OnlineUseage
recevront alors des valeurs par défaut.
Voici la requête corrigée :
<code class="language-sql">SELECT users.Name, users.ID, IFNULL(SUM(users.Minutes), 0) AS MinutesOnline FROM users LEFT JOIN OnlineUseage ON users.ID = OnlineUseage.ID WHERE users.ID IN (...) -- Your ID list here AND OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date < '2016-01-31 00:00:00';</code>
Cette requête révisée garantit que tous les identifiants de la clause IN
sont inclus dans les résultats. Si un identifiant ne dispose pas d'entrées correspondantes dans OnlineUseage
dans la plage de dates, IFNULL(SUM(users.Minutes), 0)
fournit une valeur par défaut de 0 pour MinutesOnline
. Cette approche gère efficacement les identifiants manquants et renvoie les résultats par défaut souhaités, que les identifiants soient présents ou non dans la table OnlineUseage
pour la plage de dates spécifiée.
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!