Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 列位于同一联接表中的查找表_Sql Server - Fatal编程技术网

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

在Microsoft SQL Server数据库中,我有一个具有以下结构的查找表:

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更容易。谢谢你,我没有考虑过这种方法!是的,这些列是复杂数据集的人为示例。