Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 如何获取ID为的经理列表?_Sql Server_Tsql - Fatal编程技术网

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
        );