Heim >Datenbank >MySQL-Tutorial >Warum kann ich ROW_NUMBER() nicht in einer WHERE-Klausel verwenden?
Bei der Verwendung der Funktion ROW_NUMBER() in der WHERE-Klausel ist ein Fehler aufgetreten
Es ist eine Frage bezüglich der Verwendung der Funktion ROW_NUMBER() innerhalb der WHERE aufgetreten Klausel. Bei einem Benutzer ist beim Versuch der folgenden Abfrage die Fehlermeldung „Fensterfunktionen können nur in den SELECT- oder ORDER BY-Klauseln angezeigt“ aufgetreten:
SELECT employee_id FROM v_employee WHERE ROW_NUMBER() OVER (ORDER BY employee_id) > 0 ORDER BY employee_id
Lösung: Wrapper-CTE mit Fensterfunktion
Um diesen Fehler zu beheben, besteht eine gängige Technik darin, einen Common Table Expression (CTE) zu erstellen, der die Fensterfunktionsberechnung kapselt. Indem die ursprüngliche Abfrage in einen CTE eingeschlossen wird, kann die nachfolgende Abfrage auf die Ergebnisse der Fensterfunktion zugreifen und sie in der WHERE-Klausel verwenden.
Eine überarbeitete Abfrage, die diese Lösung implementiert, würde wie folgt aussehen:
WITH MyCte AS ( select employee_id, RowNum = ROW_NUMBER() OVER (ORDER BY employee_id) from v_employee ORDER BY employee_id ) SELECT employee_id FROM MyCte WHERE RowNum > 0
Durch die Verwendung dieser Methode steht die Ausgabe der Fensterfunktion zur Verwendung in der WHERE-Klausel zur Verfügung, sodass der Benutzer die Ergebnisse erfolgreich basierend auf den gewünschten Kriterien filtern kann.
Das obige ist der detaillierte Inhalt vonWarum kann ich ROW_NUMBER() nicht in einer WHERE-Klausel verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!