Vermeiden von „Spalte existiert nicht“-Fehlern bei der Verwendung von Aliasen in PostgreSQL-WHERE-Klauseln
PostgreSQL-Abfragen können einen „Spalte existiert nicht“-Fehler auslösen, wenn Aliase innerhalb der WHERE
-Klausel verwendet werden, selbst wenn der Alias in der SELECT
-Liste definiert ist. Dies geschieht, weil die WHERE
-Klausel vor der SELECT
-Liste verarbeitet wird, was bedeutet, dass der Alias noch nicht erkannt wird.
Um dies zu umgehen, verwenden Sie eine WITH
-Klausel (auch bekannt als Common Table Expression oder CTE). Eine WITH
-Klausel erstellt eine temporäre benannte Ergebnismenge, die es Ihnen ermöglicht, in der Hauptabfrage auf den Alias zu verweisen.
Hier ist ein Beispiel, das die Lösung veranschaulicht:
<code class="language-sql">WITH jobs_with_lead_state 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_with_lead_state WHERE lead_state = 'NEW';</code>
Diese überarbeitete Abfrage definiert einen CTE mit dem Namen jobs_with_lead_state
. Der CTE führt die ersten SELECT
- und JOIN
-Operationen durch und generiert den lead_state
-Alias. Die Hauptabfrage verwendet dann diesen CTE, sodass die WHERE
-Klausel korrekt auf lead_state
verweisen kann. Dieser Ansatz vermeidet den Fehler, indem sichergestellt wird, dass der Alias während der WHERE
-Klauselauswertung verfügbar ist.
Das obige ist der detaillierte Inhalt vonWie verwende ich Aliase in PostgreSQL-WHERE-Klauseln ohne Fehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!