Heim > Datenbank > MySQL-Tutorial > Wie kann ich mithilfe der IN-Klausel Standardwerte für fehlende IDs in einer SQL-Abfrage zurückgeben?

Wie kann ich mithilfe der IN-Klausel Standardwerte für fehlende IDs in einer SQL-Abfrage zurückgeben?

Linda Hamilton
Freigeben: 2025-01-17 06:41:08
Original
803 Leute haben es durchsucht

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

Standardwerte für fehlende IDs in SQL IN-Klauselabfragen abrufen

Dieser Artikel befasst sich mit einer häufigen Herausforderung bei SQL-Abfragen: dem Abrufen von Daten für bestimmte IDs, einschließlich Standardwerten, wenn eine ID in der zugehörigen Tabelle nicht gefunden wird. Das Szenario umfasst das Abrufen von Benutzeraktivitätsdaten innerhalb eines Datumsbereichs unter Verwendung einer IN-Klausel zum Filtern nach Benutzer-IDs. Die ursprüngliche Abfrage lässt jedoch Benutzer ohne Aktivität innerhalb des angegebenen Zeitraums aus.

Das Problem liegt daran, dass sich das LEFT JOIN der Abfrage aufgrund der auf die verknüpfte Tabelle (INNER JOIN) angewendeten Bedingungen wie ein OnlineUseage verhält. Dadurch werden effektiv IDs herausgefiltert, die im angegebenen Datumsbereich nicht in OnlineUseage vorhanden sind.

Die Lösung besteht darin, die Datumsbereichsbedingung von der JOIN-Klausel in die WHERE-Klausel zu verschieben. Dadurch kann LEFT JOIN korrekt funktionieren, einschließlich aller IDs aus der users-Tabelle. IDs ohne übereinstimmende Einträge in OnlineUseage erhalten dann Standardwerte.

Hier ist die korrigierte Abfrage:

<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>
Nach dem Login kopieren

Diese überarbeitete Abfrage stellt sicher, dass alle IDs in der IN-Klausel in den Ergebnissen enthalten sind. Wenn einer ID innerhalb des Datumsbereichs keine entsprechenden Einträge in OnlineUseage fehlen, liefert IFNULL(SUM(users.Minutes), 0) einen Standardwert von 0 für MinutesOnline. Dieser Ansatz behandelt effektiv fehlende IDs und gibt die gewünschten Standardergebnisse zurück, unabhängig davon, ob die IDs in der OnlineUseage-Tabelle für den angegebenen Datumsbereich vorhanden sind.

Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe der IN-Klausel Standardwerte für fehlende IDs in einer SQL-Abfrage zurückgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage