繁体   English   中英

内部联接,然后进行自我联接

[英]Inner join followed by a self join

我有两个表PERSONPERSONRELATION

PERSON表上,我有PERSONpkFIRSTNAMELASTNAME列。

PERSONRELATION表我有MANAGER1fk这对于一个FK PERSONpk

我正在尝试加入两个表, MANAGERFIRSTNAME上面的所有字段,然后自我加入以添加MANAGERFIRSTNAMEMANAGERLASTNAME 这是我所做的,但显然不正确:

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

三个问题:

  • 您上一次的联接是错误的(当我相信您是wnat的成员,然后又回到rel.Manager1FK联接到m时,您正在重新联接。线性地考虑一下...我有一个雇员...一个雇员可以有很多关系...每个关系是给另一个雇员的...并且根据列名,这些关系是雇员经理关系。因此,您从P-> REL-> M M--P在数据示例中不存在REL 。
  • 您应该在第二次加入时为e.personpk别名
  • 假设您必须两次引用人员,则必须将人员的所有列都作为别名(即使在选择中也是如此)

表的个人关系包含员工和经理人之间的FK; 因此,您需要从personrelation(MANAGER1fk)加入第二个fk字段(这不是自我联接),如果层次结构全部由个人亲自维护,那将是自我联接。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM