Saya berjuang pada masalah yang sama dan "sintaks mysql tidak standar" menurut saya bukan argumen yang valid. PostgreSQL menambahkan ekstensi non-standar yang berguna juga, misalnya "INSERT ... RETURNING ..." untuk mendapatkan id otomatis setelah sisipan. Juga, mengulangi kueri besar bukanlah solusi yang elegan.
Namun, saya menemukan pernyataan WITH sangat membantu (CTE). Ini semacam menciptakan tampilan sementara dalam kueri yang dapat Anda gunakan seperti tabel biasa. Saya tidak yakin apakah saya telah menulis ulang GABUNG Anda dengan benar, tetapi secara umum seharusnya bekerja seperti ini:
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'