sql >> Databasteknik >  >> RDS >> PostgreSQL

Flera vänsterkopplingar på flera tabeller i en fråga

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:



  1. Kombinera SQLite Count() med GROUP BY för att lägga till en "Count"-kolumn till din resultatuppsättning

  2. Hur man läser REST-tjänst som returnerar JSON-objekt och lagrar detsamma i PostgreSQL med Mule ESB, Mule Studio

  3. Öppen eld hjälp. Anpassad databas (tabeller, fält)

  4. Hur kan jag ansluta till en Oracle-databas från Ant med hjälp av tnsname?