Questo tipo di query dovrebbe funzionare - dopo aver riscritto con JOIN esplicito sintassi:
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'
Il filo di sgancio qui è che un esplicito JOIN si lega prima del "vecchio stile" CROSS JOIN con virgola (, ). Cito il manuale qui:
Dopo aver riscritto il primo, tutti i join vengono applicati da sinistra a destra (logicamente - Postgres è libero di riorganizzare le tabelle nel piano di query in caso contrario) e funziona.
Solo per chiarire il mio punto, funzionerebbe anche questo:
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'
Ma esplicito JOIN la sintassi è generalmente preferibile, come dimostra ancora una volta il tuo caso.
E tieni presente che più (LEFT ) JOIN può moltiplicare le righe: