PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Jointure interne et jointure externe ; l'ordre des tables est-il important ?

Je pense que vous pouvez considérer cela comme un problème de priorité des opérateurs.

Lorsque vous écrivez ceci :

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   

Je pense qu'il est interprété par l'analyseur comme ceci :

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
)

Si c'est le cas, alors dans la jointure la plus interne "grp" n'est pas lié.

Lorsque vous inversez les lignes avec "groups" et "insrel", la jointure la plus interne s'applique à "groups" et "ownrel", donc cela fonctionne.

Cela fonctionnerait probablement aussi :

    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