Tôi đã đấu tranh về cùng một vấn đề và "cú pháp mysql không chuẩn" không phải là một đối số hợp lệ theo quan điểm của tôi. PostgreSQL cũng bổ sung các phần mở rộng phi tiêu chuẩn tiện dụng, chẳng hạn như "CHÈN ... RETURNING ..." để nhận id tự động sau khi chèn. Ngoài ra, lặp lại các truy vấn lớn không phải là một giải pháp tốt.
Tuy nhiên, tôi thấy câu lệnh WITH rất hữu ích (của CTE). Nó tạo ra một dạng xem tạm thời trong truy vấn mà bạn có thể sử dụng như một bảng thông thường sau đó. Tôi không chắc liệu tôi đã viết lại đúng cách JOIN của bạn hay chưa, nhưng nói chung thì nó sẽ hoạt động như thế này:
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'