PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Utilizzo di una colonna Alias ​​nella clausola where in Postgresql

Ho lottato sullo stesso problema e "la sintassi di mysql non è standard" non è un argomento valido secondo me. PostgreSQL aggiunge anche utili estensioni non standard, ad esempio "INSERT ... RETURNING ..." per ottenere ID automatici dopo gli inserimenti. Inoltre, ripetere query di grandi dimensioni non è una soluzione elegante.

Tuttavia, ho trovato molto utile la dichiarazione WITH (CTE). Crea una sorta di vista temporanea all'interno della query che puoi utilizzare come una normale tabella. Non sono sicuro di aver riscritto correttamente il tuo JOIN, ma in generale dovrebbe funzionare così:

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'