PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wiele sprzężeń lewostronnych w wielu tabelach w jednym zapytaniu

Takie zapytanie powinno działać - po przepisaniu z wyraźnym JOIN składnia:

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'

Drut wyzwalający tutaj jest taki, że jawne JOIN wiąże się przed "starym stylem" CROSS JOIN z przecinkiem (, ). Cytuję instrukcję tutaj:

Po przepisaniu pierwszego, wszystkie łączenia są stosowane od lewej do prawej (logicznie - Postgres może dowolnie zmieniać kolejność tabel w planie zapytań) i działa.

Aby podkreślić, że to też by zadziałało:

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'

Ale jawne JOIN składnia jest ogólnie preferowana, jak to ponownie ilustruje twój przypadek.

I pamiętaj, że wiele (LEFT ) JOIN może mnożyć wiersze:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. HikariCP z PostgreSQL:setQueryTimeout(int) nie jest jeszcze zaimplementowany

  2. PostgreSQL:Utwórz indeks dla kolumny logicznej

  3. Umieść $$ w ciągu znaków w cudzysłowie w PostgreSQL

  4. Instalacja PL/Ruby na PostgreSQL 9.3

  5. Grupa przechwytywania wyrażeń regularnych PostgreSQL w select