Heim > Datenbank > MySQL-Tutorial > Warum erkennt meine PostgreSQL-WHERE-Klausel meine SELECT-Alias-Spalte nicht?

Warum erkennt meine PostgreSQL-WHERE-Klausel meine SELECT-Alias-Spalte nicht?

Barbara Streisand
Freigeben: 2025-01-20 20:34:16
Original
135 Leute haben es durchsucht

Why Doesn't My PostgreSQL WHERE Clause Recognize My SELECT Alias Column?

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage