PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Usando uma coluna Alias ​​na cláusula where no Postgresql


Eu lutei com o mesmo problema e "a sintaxe do mysql não é padrão" não é um argumento válido na minha opinião. O PostgreSQL também adiciona extensões não padrão úteis, por exemplo "INSERT ... RETURNING ..." para obter ids automáticas após inserções. Além disso, repetir grandes consultas não é uma solução elegante.

No entanto, achei a instrução WITH muito útil (CTE's). Ele meio que cria uma visão temporária dentro da consulta que você pode usar como uma tabela usual. Não tenho certeza se reescrevi seu JOIN corretamente, mas em geral deve funcionar assim:
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'