Ik worstelde met hetzelfde probleem en "mysql-syntaxis is niet-standaard" is naar mijn mening geen geldig argument. PostgreSQL voegt ook handige niet-standaard extensies toe, bijvoorbeeld "INSERT ... RETURNING ..." om automatische id's te krijgen na invoegingen. Het herhalen van grote zoekopdrachten is ook geen elegante oplossing.
Ik vond de WITH-verklaring echter erg nuttig (CTE's). Het creëert een soort tijdelijke weergave binnen de query die u dan als een gewone tabel kunt gebruiken. Ik weet niet zeker of ik je JOIN correct heb herschreven, maar over het algemeen zou het als volgt moeten werken:
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'