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: