Den här typen av fråga borde fungera - efter omskrivning med explicit JOIN syntax:
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'
Utlösningstråden här är en explicit JOIN binder före "gammal stil" CROSS JOIN med kommatecken (, ). Jag citerar manualen här:
Efter att ha skrivit om den första appliceras alla kopplingar från vänster till höger (logiskt - Postgres är fritt att ordna om tabeller i frågeplanen annars) och det fungerar.
Bara för att göra min poäng, det här skulle också fungera:
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'
Men explicit JOIN syntax är i allmänhet att föredra, vilket ditt fall återigen visar.
Och tänk på att flera (LEFT ) JOIN kan multiplicera rader: