内连接后跟自连接

时间:2017-06-01 20:16:23

标签: sql sql-server inner-join self-join

我有两张表MessageReceiverPERSON

PERSONRELATION表格中,我有PERSONPERSONpkFIRSTNAME列。

LASTNAME表格中我有PERSONRELATION,这是MANAGER1fk的fk。

我正在尝试加入这两个表格,将上面的所有字段移到上面并自行加入以添加PERSONpkMANAGERFIRSTNAME。这是我所做的,但显然不正确:

MANAGERLASTNAME

1 个答案:

答案 0 :(得分:1)

三个问题:

  • 你最后的加入是错的(当我相信你想加入rel.Manager1FK到m时,你加入了e。想想它线性地......我有一个员工......一个员工可以有很多关系......每个关系都是另一个员工...并且基于列名,这些关系是员工经理关系。所以你从P - > REL - > M M - P不能存在w / o数据示例中的REL。
  • 您应该在第二次加入时使用别名e.personpk
  • 鉴于你必须两次引用人,所有人的列必须别名(即使在选择中)

表格相关性包含员工和经理人员的FK;因此你需要加入来自个人关系的第二个fk字段(MANAGER1fk)(这不是一个自我联接)如果这个层次结构都是亲自维护的,那么它就是一个自我加入。

SELECT e.PERSONpk
     , rel.MANAGER1FK
     , e.FIRSTNAME
     , e.LastName
     , m.FIRSTNAME
     , M.LASTNAME
FROM dbo.PERSON e
INNER JOIN dbo.PERSONRELATION rel
  ON rel.PERSONFK = e.PERSONPK
INNER JOIN dbo.PERSON m 
  ON m.PERSONpk = rel.MANAGER1FK