Den här typen av fråga borde fungera - efter omskrivning med explicit JOIN
syntax:
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'
Utlösningstråden här är en explicit JOIN
binder före "gammal stil" CROSS JOIN
med kommatecken (,
). Jag citerar manualen här:
Efter att ha skrivit om den första appliceras alla kopplingar från vänster till höger (logiskt - Postgres är fritt att ordna om tabeller i frågeplanen annars) och det fungerar.
Bara för att göra min poäng, det här skulle också fungera:
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'
Men explicit JOIN
syntax är i allmänhet att föredra, vilket ditt fall återigen visar.
Och tänk på att flera (LEFT
) JOIN
kan multiplicera rader: