sql >> Base de Datos >  >> RDS >> PostgreSQL

Unión interna y unión externa; ¿Es importante el orden de las tablas?

Creo que puede pensar en esto como un problema de precedencia de operadores.

Cuando escribes esto:

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   

Creo que el analizador lo interpreta así:

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 es así, entonces en la unión más interna "grp" no está vinculado.

Cuando invierte las líneas con "groups" e "insrel", la combinación más interna se aplica a "groups" y "ownrel", por lo que funciona.

Probablemente esto también funcionaría:

    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