PostgreSQL: Beheben von Problemen mit Aliasspalten in WHERE-Klauseln
Fehler, bei denen die WHERE
-Klausel von PostgreSQL SELECT
-Aliase nicht erkennt, sind auf die Abfrageverarbeitungsreihenfolge der Datenbank zurückzuführen. Im Gegensatz zu einigen anderen Systemen (wie MySQL) verarbeitet PostgreSQL die WHERE
-Klausel vor der SELECT
-Klausel. Daher sind Aliase, die nur in der SELECT
-Liste definiert sind, in der WHERE
-Klausel nicht verfügbar.
Effektive Lösung: Common Table Expressions (CTEs)
Die effizienteste Lösung ist die Verwendung eines Common Table Expression (CTE). Ein CTE fungiert als temporärer, benannter Ergebnissatz, der es Ihnen ermöglicht, Aliase zu definieren und später in der Abfrage darauf zu verweisen:
<code class="language-sql">WITH jobs_refined AS ( SELECT jobs.*, CASE WHEN lead_informations.state IS NOT NULL THEN lead_informations.state ELSE 'NEW' END AS lead_state FROM jobs LEFT JOIN lead_informations ON lead_informations.job_id = jobs.id AND lead_informations.mechanic_id = 3 ) SELECT * FROM jobs_refined WHERE lead_state = 'NEW';</code>
Diese verbesserte Abfrage verwendet den CTE jobs_refined
, um lead_state
zu definieren. Die WHERE
-Klausel kann diesen Alias dann korrekt verwenden, da der CTE ihn bereits verarbeitet und definiert hat. Dieser Ansatz vermeidet den ursprünglichen Fehler und bietet eine sauberere, besser lesbare Abfrage.
Das obige ist der detaillierte Inhalt vonWarum erkennt meine PostgreSQL-WHERE-Klausel meine SELECT-Alias-Spalte nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!