Heim >Datenbank >MySQL-Tutorial >Wie gehe ich mit fehlenden Datensätzen in einer IN-Abfrage mit Standardwerten um?
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:
<code class="language-sql">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);</code>
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.
<code class="language-sql">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);</code>
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!