Este tipo de consulta debería funcionar, después de reescribir con JOIN
explícito sintaxis:
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'
El hilo conductor aquí es que un JOIN
explícito se une antes del "estilo antiguo" CROSS JOIN
con coma (,
). Cito el manual aquí:
Después de reescribir la primera, todas las uniones se aplican de izquierda a derecha (lógicamente, Postgres es libre de reorganizar las tablas en el plan de consulta de lo contrario) y funciona.
Solo para aclarar mi punto, esto también funcionaría:
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'
Pero explícito JOIN
la sintaxis es generalmente preferible, como ilustra su caso una vez más.
Y tenga en cuenta que múltiples (LEFT
) JOIN
puede multiplicar filas: