Този вид заявка трябва да работи - след пренаписване с изричен JOIN
синтаксис:
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'
Изключващият проводник тук е изричен JOIN
се свързва преди "стар стил" CROSS JOIN
със запетая (,
). Цитирам ръководството тук:
След пренаписване на първия, всички съединения се прилагат отляво надясно (логично - Postgres е свободен да пренарежда таблиците в плана на заявката в противен случай) и работи.
Само за да кажа, че това също би свършило работа:
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'
Но изрично JOIN
синтаксис обикновено е за предпочитане, както вашият случай показва още веднъж.
И имайте предвид, че множество (LEFT
) JOIN
може да умножава редове: