Inner join & outer join; is the order of tables in from important?

前端 未结 5 2012

Why is the order of tables important when combining an outer & an inner join ? the following fails with postgres:

SELECT grp.number AS number,     
              


        
5条回答
  •  青春惊慌失措
    2020-12-13 06:05

    I believe that you can think of this as an operator precedence issue.

    When you write this:

    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   
    

    I think it is interpreted by the parser like this:

    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
    )
    

    If so, then in the innermost join "grp" is unbound.

    When you reverse the lines with "groups" and "insrel", the innermost join applies to "groups" and "ownrel", so it works.

    Probably this would work as well:

        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
    

提交回复
热议问题