PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Utilisation d'une colonne Alias ​​dans la clause where dans Postgresql

J'ai lutté sur le même problème et "la syntaxe mysql n'est pas standard" n'est pas un argument valable à mon avis. PostgreSQL ajoute également des extensions non standard pratiques, par exemple "INSERT ... RETURNING ..." pour obtenir des identifiants automatiques après les insertions. De plus, répéter des requêtes volumineuses n'est pas une solution élégante.

Cependant, j'ai trouvé l'instruction WITH très utile (CTE). Cela crée en quelque sorte une vue temporaire dans la requête que vous pouvez ensuite utiliser comme une table habituelle. Je ne sais pas si j'ai correctement réécrit votre JOIN, mais en général, cela devrait fonctionner comme ceci :

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'