Dit soort query zou moeten werken - na herschrijven met expliciete JOIN syntaxis:
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'
De struikeldraad hier is dat een expliciete JOIN bindt voor "oude stijl" CROSS JOIN met komma (, ). Ik citeer hier de handleiding:
Nadat de eerste is herschreven, worden alle joins van links naar rechts toegepast (logisch - Postgres is vrij om tabellen in het queryplan anders te herschikken) en het werkt.
Om mijn punt te maken, dit zou ook werken:
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'
Maar expliciete JOIN syntaxis heeft over het algemeen de voorkeur, zoals uw geval nogmaals illustreert.
En houd er rekening mee dat meerdere (LEFT ) JOIN kan rijen vermenigvuldigen: