PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Множество леви съединения на множество таблици в една заявка

Този вид заявка трябва да работи - след пренаписване с изричен 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 може да умножава редове:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ruby on Rails:Има ли начин да се изтеглят елементи от базата данни и да се върнат в определен ред?

  2. Каква е паролата по подразбиране за postgreSQL, инсталиран от Gitlab Omibus версия?

  3. rake db:structure:dump се проваля под PostgreSQL / Rails 3.2

  4. Правилна настройка на пул за свързване към базата данни database.yml за еднонишкови Rails приложения

  5. Моделиране на големи обекти на PostgreSQL в Rails