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: