Beim Versuch, einen Alias in der ORDER BY-Klausel einer PostgreSQL-Abfrage zu verwenden, stoßen einige Benutzer auf den Fehler „column existiert nicht.“
Berücksichtigen Sie Folgendes folgendes Beispiel:
SELECT title, (stock_one + stock_two) AS global_stock FROM product ORDER BY global_stock = 0, title;
Das Ausführen dieser Abfrage in PostgreSQL 8.1.23 führt zu dem Fehler: „Spalte ‚global_stock‘ existiert nicht.“ Dieser Fehler tritt auf, weil Aliase in der ORDER BY-Klausel nicht erkannt werden.
Es gibt zwei mögliche Lösungen:
1. Numerische Reihenfolge:
Anstatt den Alias zu verwenden, können Sie die Spalte anhand ihrer Position in der SELECT-Klausel referenzieren. Im obigen Beispiel entspricht der Alias „global_stock“ der Spalte 2. Daher wäre die geänderte Abfrage:
SELECT title, (stock_one + stock_two) AS global_stock FROM product ORDER BY 2, 1;
2. Unterabfrage mit CASE-Ausdruck:
Eine andere Möglichkeit besteht darin, eine Unterabfrage und einen CASE-Ausdruck zu verwenden:
SELECT * FROM ( SELECT title, (stock_one + stock_two) AS global_stock FROM product ) x ORDER BY (CASE WHEN global_stock = 0 THEN 1 ELSE 0 END) DESC, title;
In diesem Fall weist der CASE-Ausdruck den Zeilen mit den Wert 1 zu 'global_stock' = 0 und 0 für alle anderen. Die Abfrage sortiert dann die Ergebnisse in absteigender Reihenfolge basierend auf diesem Wert und priorisiert so effektiv die verfügbaren Elemente.
Das obige ist der detaillierte Inhalt vonWie kann ich einen Alias in einer PostgreSQL-ORDER-BY-Klausel verwenden, ohne die Fehlermeldung „Spalte existiert nicht' zu erhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!