对supervisor表的SQL查询

对supervisor表的SQL查询,sql,sql-server,Sql,Sql Server,对于下面给出的图片上的标记查询,SQL server中的SQL查询是什么 找到鲍勃的所有直接和间接主管 试试这个: DECLARE @T TABLE (Person NVARCHAR(30) , Supervisor NVARCHAR(30)); INSERT INTO @T VALUES ('Bob','Alice'),('Mary','Susan'),('Alice','David'),('David','Mary'); select T.Supervisor from @T T Whe

对于下面给出的图片上的标记查询,SQL server中的SQL查询是什么

找到鲍勃的所有直接和间接主管

试试这个:

DECLARE @T TABLE (Person NVARCHAR(30) , Supervisor NVARCHAR(30));
INSERT INTO @T VALUES
('Bob','Alice'),('Mary','Susan'),('Alice','David'),('David','Mary');

select T.Supervisor
from @T T
Where T.Person = 'Bob'
union all
Select TT.Supervisor
From @T TT inner join @T A
on  A.Supervisor = TT.Person
1=选择主管 来自emp super 其中person='bob'

2=选择主管 来自emp super 人在哪里= 选择主管 来自emp super 其中person='bob'

选择T.supervisor、F.supervisor 来自emp_Super T,emp_Super F 其中T.person='Bob' 而T.主管=F.人;
至少对这个表有效。

您问题中给出的信息不足以给您答案,因为它没有描述两个表之间的任何关系,或者即使它们是表或只是同一表的列。在递归cte中执行此操作,基本上,您可以使用union 2查询,其中supervisor=person,并且您在第二个查询中引用了cte。它是唯一具有两列的表@LudvigRydahlIn SQL Server,您要查找的是调用公共表表达式我在这方面有两个错误:1个列名无效的Person和2个列名无效的Supervisor。此查询不适用于Bob以外的任何人。所有这些都是假设Bob不是其他人的主管,然后列出所有的主管。这是最好的方法吗?难道找不到更一般的解决方案吗?假设查询返回Bob的所有主管,包括直接主管和间接主管。不仅仅是爱丽丝和大卫。除此之外,我建议使用SQLANSI-92语法,而不是旧的语法。
DECLARE @T TABLE (Person NVARCHAR(30) , Supervisor NVARCHAR(30));
INSERT INTO @T VALUES
('Bob','Alice'),('Mary','Susan'),('Alice','David'),('David','Mary');

select T.Supervisor
from @T T
Where T.Person = 'Bob'
union all
Select TT.Supervisor
From @T TT inner join @T A
on  A.Supervisor = TT.Person
SELECT T.supervisor, F.supervisor, K.supervisor, M.supervisor
FROM emp_super T, emp_super F, emp_super K, emp_super M
WHERE
 T.Person = "Bob" AND
 F.Person = T.Supervisor AND 
 K.person = F.Supervisor AND
 M.Person = K.Supervisor ;