Diese Art von Abfrage sollte funktionieren - nach dem Umschreiben mit explizitem 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'
Der Stolperdraht hier ist, dass ein explizites JOIN bindet vor "altem" CROSS JOIN mit Komma (, ). Ich zitiere das Handbuch hier:
Nach dem Umschreiben des ersten werden alle Joins von links nach rechts angewendet (logischerweise steht es Postgres frei, Tabellen im Abfrageplan ansonsten neu anzuordnen) und es funktioniert.
Nur um meinen Standpunkt zu verdeutlichen, das würde auch funktionieren:
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'
Aber explizit JOIN Syntax ist im Allgemeinen vorzuziehen, wie Ihr Fall wieder einmal zeigt.
Und seien Sie sich bewusst, dass mehrere (LEFT ) JOIN kann Zeilen multiplizieren: