sql >> Base de Datos >  >> RDS >> PostgreSQL

Usando una columna Alias ​​en la cláusula where en Postgresql

Tuve problemas con el mismo problema y "la sintaxis de mysql no es estándar" no es un argumento válido en mi opinión. PostgreSQL también agrega prácticas extensiones no estándar, por ejemplo, "INSERTAR... REGRESAR..." para obtener identificaciones automáticas después de las inserciones. Además, repetir consultas grandes no es una solución elegante.

Sin embargo, encontré la declaración CON muy útil (CTE). En cierto modo, crea una vista temporal dentro de la consulta que puede usar como una tabla habitual en ese momento. No estoy seguro de haber reescrito tu JOIN correctamente, pero en general debería funcionar así:

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'