PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Inner Join &Outer Join; ist die Reihenfolge der Tabellen von wichtig?

Ich glaube, Sie können sich das als ein Problem mit der Priorität von Operatoren vorstellen.

Wenn Sie dies schreiben:

FROM groups grp,
     insrel archiverel  
LEFT OUTER JOIN ownrel ownrel ON grp.number = ownrel.dnumber   
LEFT OUTER JOIN tags tags ON tags.number = ownrel.snumber   

Ich denke, es wird vom Parser so interpretiert:

FROM groups grp,
(
  (
     insrel archiverel  
     LEFT OUTER JOIN ownrel ownrel ON grp.number = ownrel.dnumber   
  )
LEFT OUTER JOIN tags tags ON tags.number = ownrel.snumber
)

Wenn ja, dann ist im innersten Join "grp" ungebunden.

Wenn Sie die Zeilen mit "groups" und "insrel" umkehren, gilt der innerste Join für "groups" und "ownrel", also funktioniert es.

Wahrscheinlich würde das auch funktionieren:

    FROM groups grp
         JOIN insrel archiverel  ON archiverel.dnumber = grp.number
    LEFT OUTER JOIN ownrel ownrel ON grp.number = ownrel.dnumber   
    LEFT OUTER JOIN tags tags ON tags.number = ownrel.snumber 
WHERE archiverel.snumber = 11128188