SQL查询以获取具有2个表(多对多)的员工的经理姓名

SQL查询以获取具有2个表(多对多)的员工的经理姓名,sql,dapper,Sql,Dapper,我试图学习使用Dapper而不是EF Core,因为我想先学习SQL的基础知识。 到目前为止,我一直在稳步学习,但现在我坚持以下几点 我有两张桌子,员工和经理。 我们公司一名员工可以有一名以上的经理。这就是为什么我必须为多对多关系使用两个表的原因,因为经理也是员工,所以我只需要两个表 在Managers表中,我们有两个外键: ManagerId引用回Employees表 EmployeeId引用回Employees表 显然,经理的名字不在该表中,因为我们应该能够从Employees表中获得它 我

我试图学习使用Dapper而不是EF Core,因为我想先学习SQL的基础知识。 到目前为止,我一直在稳步学习,但现在我坚持以下几点

我有两张桌子,员工和经理。 我们公司一名员工可以有一名以上的经理。这就是为什么我必须为多对多关系使用两个表的原因,因为经理也是员工,所以我只需要两个表

在Managers表中,我们有两个外键: ManagerId引用回Employees表 EmployeeId引用回Employees表 显然,经理的名字不在该表中,因为我们应该能够从Employees表中获得它

我可以编写查询,通过内部连接获取用户及其经理id,这很有效

SELECT emp.EmailAddress, man.ManagerId 
FROM Employees emp 
LEFT JOIN Managers man ON emp.EmployeeId = man.EmployeeId 
到目前为止还不错,但是。。。我真正想看到的是经理的名字。我在网上看到的大多数示例都是使用1 emp has 1 manager查询样式的,但现在在我的例子中,您有了多对多查询样式

那么,我可以再次回到Employees表以获取经理姓名的最佳解决方案是什么呢


我希望我的问题足够清楚,谢谢你的帮助

为了获得经理的详细信息,您需要再次加入员工信息。大概是这样的:

SELECT emp.EmailAddress, man.ManagerId, manDetails.Name
FROM Employees emp 
LEFT JOIN Managers man ON emp.EmployeeId = man.EmployeeId
LEFT JOIN Employees manDetails ON man.ManagerId = manDetails.EmployeeId

提示:你可以用不同的别名引用同一张表两次。我现在觉得很傻,但我觉得这样的例子并不常见,很多公司都喜欢,一个emp有一个经理,就这样但是谢谢你的提示。