Standardwert für IN-Abfragebedingung abrufen
Angenommen, eine Abfrage ruft Benutzerinformationen und die Anzahl der Minuten ab, die sie innerhalb eines bestimmten Datumsbereichs online waren. Es verwendet eine IN-Abfrage, um Benutzer anhand ihrer ID zu filtern. Das Ziel besteht darin, einen Standardwert für die IDs zurückzugeben, für die keine übereinstimmenden Datensätze vorhanden sind.
Vereinfachte Abfrage:
SELECT users.Name, users.ID, SUM(users.Minutes) AS MinutesOnline FROM UserTable LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID WHERE OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date < '2016-01-31 00:00:00' AND users.ID IN (1,2,3,4,5);
Geänderte Abfrage:
Um die gewünschten Ergebnisse zu erzielen, verschieben Sie die Bedingung für OnlineUseage in die FROM-Klausel. Dadurch wird sichergestellt, dass sich der linke Join wie ein innerer Join verhält und Benutzer ohne übereinstimmende Datensätze in OnlineUseage herausfiltert.
SELECT users.Name, users.ID, IFNULL(SUM(users.Minutes), 0) AS MinutesOnline FROM users LEFT JOIN OnlineUseage ON OnlineUseage.ID = users.ID AND OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date < '2016-01-31 00:00:00' WHERE users.ID IN (1,2,3,4,5);
Die Abfrage ruft nun Benutzer mit übereinstimmenden Datensätzen in OnlineUseage und Benutzer ohne übereinstimmende Datensätze ab, während MinutesOnline für Benutzer ohne übereinstimmende Datensätze auf den Standardwert 0 gesetzt wird.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit fehlenden Datensätzen in einer IN-Abfrage mit Standardwerten um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!