Ce type de requête devrait fonctionner - après réécriture avec un JOIN
explicite syntaxe :
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'
Le fil de déclenchement ici est qu'un JOIN
explicite se lie avant "l'ancien style" CROSS JOIN
avec virgule (,
). Je cite le manuel ici :
Après réécriture de la première, toutes les jointures sont appliquées de gauche à droite (logiquement - Postgres est libre de réorganiser les tables dans le plan de requête sinon) et cela fonctionne.
Juste pour faire valoir mon point de vue, cela fonctionnerait aussi :
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'
Mais JOIN
explicite la syntaxe est généralement préférable, comme votre cas l'illustre une fois de plus.
Et sachez que plusieurs (LEFT
) JOIN
peut multiplier les lignes :