PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Verwenden einer Alias-Spalte in der where-Klausel in Postgresql

Ich habe mit demselben Problem gekämpft und "Mysql-Syntax ist kein Standard" ist meiner Meinung nach kein gültiges Argument. PostgreSQL fügt auch praktische nicht standardmäßige Erweiterungen hinzu, zum Beispiel "INSERT ... RETURNING ...", um nach Einfügungen automatische IDs zu erhalten. Außerdem ist das Wiederholen großer Abfragen keine elegante Lösung.

Allerdings fand ich die WITH-Anweisung sehr hilfreich (CTE's). Es erstellt eine Art temporäre Ansicht innerhalb der Abfrage, die Sie dann wie eine normale Tabelle verwenden können. Ich bin mir nicht sicher, ob ich Ihren JOIN richtig umgeschrieben habe, aber im Allgemeinen sollte es so funktionieren:

WITH jobs_refined AS (
    SELECT
        jobs.*,
        (SELECT 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'