Heim >Datenbank >MySQL-Tutorial >Wie werden Standardergebnisse für fehlende IN-Werte in SQL-Abfragen zurückgegeben?
Standardergebnisse für die Behandlung fehlender IN-Werte in SQL-Abfragen
In SQL wird die IN-Abfrage verwendet, um Zeilen basierend auf einer Reihe von Werten zu filtern. Bei der Verwendung für dynamische Abfragen kann es jedoch erforderlich sein, mit der Situation umzugehen, dass für einige Werte in der IN-Liste möglicherweise keine entsprechenden Datensätze in der Datenbank vorhanden sind. Dies führt zu leeren Zeilen für diese Werte, was sich auf die spätere Verarbeitung oder Datenanzeige auswirkt.
Um dieses Problem zu lösen, sollten Sie die Abfrage mit LEFT JOIN neu schreiben. Durch Verschieben der Bedingung von der WHERE-Klausel in die ON-Klausel des LEFT JOIN (wie im bereitgestellten Beispielcode gezeigt) können Sie sicherstellen, dass alle Werte in der IN-Liste im Ergebnissatz enthalten sind. Dies liegt daran, dass LEFT JOIN alle Zeilen in der linken Tabelle zurückgibt, auch wenn es in der rechten Tabelle keine passenden Zeilen gibt.
Beispiel:
Betrachten Sie die folgende vereinfachte Abfrage:
<code class="language-sql">SELECT Name, ID, SUM(Minutes) AS MinutesOnline FROM UserTable LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID WHERE UserTable.ID IN (332, 554, 5764, 11, 556, ...)</code>
In dieser Abfrage wird die Bedingung OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date
weggelassen, der Vollständigkeit halber sollten wir sie in die JOIN-Bedingung aufnehmen.
Die verbesserte Abfrage lautet wie folgt:
<code class="language-sql">SELECT Name, ID, IFNULL(SUM(Minutes), 0) AS MinutesOnline FROM UserTable LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID AND OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date < CURRENT_TIMESTAMP WHERE UserTable.ID IN (332, 554, 5764, 11, 556, ...)</code>
Für jeden Wert in der IN-Liste, der keinen entsprechenden Datensatz in der OnlineUseage
-Tabelle hat, gibt LEFT JOIN nun einen NULL-Wert für die entsprechende Spalte zurück. Der NULL-Wert kann dann mithilfe der IFNULL-Funktion durch den Standardwert (in diesem Fall 0) ersetzt werden.
Dieser Ansatz stellt sicher, dass alle Werte in der IN-Liste im Ergebnissatz enthalten sind, und weist Werten, die die angegebenen Kriterien nicht erfüllen, entsprechende Standardwerte zu. Bitte beachten Sie, dass CURRENT_TIMESTAMP
verwendet wird, um das mehrdeutige <p>Now
im Originaltext zu ersetzen, um eine korrekte Ausführung der Abfrage sicherzustellen.
Das obige ist der detaillierte Inhalt vonWie werden Standardergebnisse für fehlende IN-Werte in SQL-Abfragen zurückgegeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!