Jeg kæmpede med det samme problem, og "mysql-syntaks er ikke-standard" er ikke et gyldigt argument efter min mening. PostgreSQL tilføjer også praktiske ikke-standardudvidelser, for eksempel "INSERT ... RETURNING ..." for at få auto-id'er efter indsættelser. Gentagelse af store forespørgsler er heller ikke en elegant løsning.
Men jeg fandt WITH-erklæringen meget nyttig (CTE'er). Det opretter på en måde en midlertidig visning i forespørgslen, som du kan bruge som en sædvanlig tabel derefter. Jeg er ikke sikker på, om jeg har omskrevet dit JOIN korrekt, men generelt burde det fungere sådan her:
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'