Takie zapytanie powinno działać - po przepisaniu z wyraźnym JOIN
składnia:
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'
Drut wyzwalający tutaj jest taki, że jawne JOIN
wiąże się przed "starym stylem" CROSS JOIN
z przecinkiem (,
). Cytuję instrukcję tutaj:
Po przepisaniu pierwszego, wszystkie łączenia są stosowane od lewej do prawej (logicznie - Postgres może dowolnie zmieniać kolejność tabel w planie zapytań) i działa.
Aby podkreślić, że to też by zadziałało:
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'
Ale jawne JOIN
składnia jest ogólnie preferowana, jak to ponownie ilustruje twój przypadek.
I pamiętaj, że wiele (LEFT
) JOIN
może mnożyć wiersze: