Maison > base de données > tutoriel mysql > Comment renvoyer les valeurs par défaut pour les ID manquants dans une requête SQL à l'aide de la clause IN ?

Comment renvoyer les valeurs par défaut pour les ID manquants dans une requête SQL à l'aide de la clause IN ?

Linda Hamilton
Libérer: 2025-01-17 06:41:08
original
803 Les gens l'ont consulté

How to Return Default Values for Missing IDs in an SQL Query Using IN Clause?

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

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!

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