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

unione interna &unione esterna; l'ordine delle tabelle da è importante?

Credo che tu possa pensare a questo come a un problema di precedenza dell'operatore.

Quando scrivi questo:

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   

Penso che sia interpretato dal parser in questo modo:

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
)

In tal caso, nel join più interno "grp" non è associato.

Quando inverti le linee con "groups" e "insrel", il join più interno si applica a "groups" e "ownrel", quindi funziona.

Probabilmente funzionerebbe anche questo:

    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