Kueri semacam ini seharusnya berfungsi - setelah menulis ulang dengan eksplisit JOIN
sintaks:
SELECT something
FROM master parent
JOIN master child ON child.parent_id = parent.id
LEFT JOIN second parentdata ON parentdata.id = parent.secondary_id
LEFT JOIN second childdata ON childdata.id = child.secondary_id
WHERE parent.parent_id = 'rootID'
Kawat tersandung di sini adalah JOIN
yang eksplisit mengikat sebelum "gaya lama" CROSS JOIN
dengan koma (,
). Saya mengutip manualnya di sini:
Setelah menulis ulang yang pertama, semua gabungan diterapkan dari kiri ke kanan (secara logika - Postgres bebas untuk mengatur ulang tabel dalam rencana kueri jika tidak) dan berhasil.
Sekadar menegaskan, ini juga akan berhasil:
SELECT something
FROM master parent
LEFT JOIN second parentdata ON parentdata.id = parent.secondary_id
, master child
LEFT JOIN second childdata ON childdata.id = child.secondary_id
WHERE child.parent_id = parent.id
AND parent.parent_id = 'rootID'
Tapi eksplisit JOIN
sintaks umumnya lebih disukai, seperti yang diilustrasikan oleh kasus Anda sekali lagi.
Dan perlu diketahui bahwa banyak (LEFT
) JOIN
dapat memperbanyak baris: