Heim >Datenbank >MySQL-Tutorial >Wie kann ich mithilfe der IN-Klausel Standardwerte für fehlende IDs in einer SQL-Abfrage zurückgeben?
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>
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!