Sql server 列位于同一联接表中的查找表
在Microsoft SQL Server数据库中,我有一个具有以下结构的查找表:Sql server 列位于同一联接表中的查找表,sql-server,Sql Server,在Microsoft SQL Server数据库中,我有一个具有以下结构的查找表: Assistants: EmployeeId, AssistantId 这两个ID位于第二个表中: Employees: Id, FirstName, LastName 我想加入两个表格,列出每个员工和他们的助理,可能不止一个。我尝试了以下我认为有效的方法: select * from Assistants join Employees on Assistants.EmployeeId = Employee
Assistants:
EmployeeId, AssistantId
这两个ID位于第二个表中:
Employees:
Id, FirstName, LastName
我想加入两个表格,列出每个员工和他们的助理,可能不止一个。我尝试了以下我认为有效的方法:
select * from Assistants
join Employees
on Assistants.EmployeeId = Employees.Id AND Assistants.AssistantId = Employees.Id
但是它什么也不返回,您知道我如何获得每个员工和助理的列表吗?您必须使用employee表两次-一次获取员工,一次获取助理 我假设并非所有员工都有助手,因此您可能应该使用左连接:
SELECT * -- You really should specify the columns names here
FROM Employees As Emp
LEFT JOIN Assistants
ON Emp.Id = Assistants.EmployeeId
LEFT JOIN Employees As Assist -- You should probably find a better name for this alias...
ON Assistants.AssistantId = Assist.Id
这将为您提供所有员工及其助理的列表。但是,如果您可以有多个级别的助理(即CTO有一个助理CTO,他们自己也有一个助理),您将需要一个递归cte。从我的脑海中消失。像这样的
Select E.ID, E.FirstName, E.LastName, TBLA.FirstName, TBLA.LastName
FROM Employees E
LEFT JOIN (
Select E.FirstName, E.LastName, A.AssistantId
from Assistants A
INNER JOIN Employees on A.AssistantId = Employees.ID
) TBLA ON TBLA.AssistantId = E.ID
where TBLA.AssistantId is NOT null
为什么加入条件的第二部分
和AssistantId.AssistantId=Employees.Id
会将助手的内部Id
与Employee.Id
匹配-我非常怀疑这种情况!我打赌你只需要助手的。EmployeeId=Employees.Id
就可以了……给我们展示一些样本数据和预期结果,作为格式化文本,或者让回答DDL/DML更容易。谢谢你,我没有考虑过这种方法!是的,这些列是复杂数据集的人为示例。