Sql server 如何获取ID为的经理列表?
我有一个具有以下模式的用户表Sql server 如何获取ID为的经理列表?,sql-server,tsql,Sql Server,Tsql,我有一个具有以下模式的用户表 UserId, Name, ManagerId 这个ManagerId只不过是一个用户ID,因为经理也是一个用户 我可以使用下面的查询获得经理列表,但如何将managerId与姓名一起获得 Select DISTINCT(ManagerId) from Users group by ManagerId 我想要以下输出 ManagerId, Name 试试这个: SELECT UserId, Name FROM Permission WHERE UserId I
UserId, Name, ManagerId
这个ManagerId只不过是一个用户ID,因为经理也是一个用户
我可以使用下面的查询获得经理列表,但如何将managerId与姓名一起获得
Select DISTINCT(ManagerId) from Users
group by ManagerId
我想要以下输出
ManagerId, Name
试试这个:
SELECT UserId, Name
FROM Permission
WHERE UserId IN (Select DISTINCT ManagerId FROM Permission)
也可以使用连接:
我相信您希望检索作为经理的用户。这可以使用EXISTS子句完成:
DISTINCT子句是可选的,可能是无关的,具体取决于您的数据。如果是这种情况,请将其删除以提高性能。distinct需要对输入进行排序,然后删除重复项。我不确定与Giorgos建议的distinct一起使用是否是一个好主意。SQLServer有一个很好的优化引擎,但我在使用这种语句时有过不好的经验 存在更好的利用
请记住,最好在权限表上有索引,其中第一个索引列是UserId,而在另一个索引ManagerId中有索引。这种方法将非常有效。这应该是最有效的方法?我认为第二个查询比第一个查询更有效。
SELECT UserId, Name
FROM Permission AS p1
JOIN (Select DISTINCT ManagerId FROM Permission) AS p2
ON p1.UserId = p2.MAnagerId
SELECT DISTINCT UserId, Name
FROM Permission p1
WHERE EXISTS (
SELECT 1
FROM Permission p2
WHERE p1.UserId = p2.ManagerId
)
SELECT P1.UserId, P1.Name
FROM Permission AS P1
WHERE EXISTS (
SELECT *
FROM Permission AS P2
WHERE P2.ManagerId = P1.UserId
);