Zmagałem się z tym samym problemem, a „składnia mysql jest niestandardowa” nie jest moim zdaniem słusznym argumentem. PostgreSQL dodaje również przydatne niestandardowe rozszerzenia, na przykład "INSERT ... RETURNING ...", aby uzyskać automatyczne identyfikatory po wstawieniu. Ponadto powtarzanie dużych zapytań nie jest eleganckim rozwiązaniem.
Jednak uważam, że instrukcja WITH jest bardzo pomocna (CTE). Tworzy to w pewnym sensie tymczasowy widok w zapytaniu, którego można wtedy używać jak zwykłej tabeli. Nie jestem pewien, czy poprawnie przepisałem twoje JOIN, ale ogólnie powinno działać tak:
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'