sql >> Database teknologi >  >> RDS >> PostgreSQL

Flere venstre joinforbindelser på flere tabeller i én forespørgsel

Denne form for forespørgsel burde virke - efter omskrivning med eksplicit JOIN syntaks:

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'

Udløserledningen her er en eksplicit JOIN binder før "gammel stil" CROSS JOIN med komma (, ). Jeg citerer manualen her:

Efter omskrivning af den første, anvendes alle joinforbindelser fra venstre mod højre (logisk - Postgres er fri til at omarrangere tabeller i forespørgselsplanen ellers), og det virker.

Bare for at gøre min pointe, dette ville også fungere:

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 eksplicit JOIN syntaks er generelt at foretrække, som din case illustrerer igen.

Og vær opmærksom på, at flere (LEFT ) JOIN kan gange rækker:



  1. Sådan eksporteres forespørgselsresultat til Excel i Oracle SQL Developer?

  2. Hjælp til at beregne kompleks sum i hierarkisk datasæt

  3. Importer XML-filer til PostgreSQL

  4. Sådan gemmer du medarbejdernes tidsplaner i en database