Esse tipo de consulta deve funcionar - depois de reescrever com
JOIN
explícito sintaxe: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'
O fio de manobra aqui é que um
JOIN
explícito vincula antes do "estilo antigo" CROSS JOIN
com vírgula (,
). Cito o manual aqui:
Depois de reescrever a primeira, todas as junções são aplicadas da esquerda para a direita (logicamente - o Postgres é livre para reorganizar as tabelas no plano de consulta) e funciona.
Só para deixar meu ponto de vista, isso também funcionaria:
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'
Mas explícito
JOIN
sintaxe é geralmente preferível, como seu caso ilustra mais uma vez. E esteja ciente de que vários (
LEFT
) JOIN
pode multiplicar linhas: