从单个表

时间:2016-08-17 00:50:18

标签: sql postgresql

我目前有一个托管所有用户的表。现在,一些用户team_leaders引用了团队负责人的用户ID,该用户ID也存储在数据库中。

现在,我想做的事情(并且无法弄清楚)是如何查询数据库,它在一个结果集中检索所有团队成员和领导者的ID列表。

例如

name | id | team_leader
--------------------------------------------------
Jack | 1  | null
--------------------------------------------------
Susan| 2  | 1
--------------------------------------------------
Bob  | 3  | 1
--------------------------------------------------
Eric | 4  | null
--------------------------------------------------

SELECT name FROM users where team_leader = '<some user's id>'

返回[ 'Susan', Bob']

但我希望它能归还包括的团队领导,例如

['Jack', 'Susan', 'Bob']

有没有人知道如何在查询结果中包含团队负责人?

编辑:

好吧,好像我没有100%解释自己,我的道歉。所以此查询的目标是执行以下操作。

我有另一个名为leads的表,其中有一个名为user_id的字段,它与有权访问潜在客户的用户相关联。现在,我想介绍团队领导者更新与其帐户相关联的潜在客户的能力,因此如果当前用户是团队负责人,他们应该能够将user_id从他们的ID更新为任何人他们的团队,从他们的一个孩子到另一个孩子,从一个孩子到他们自己,但不是任何不在他们团队中的人。所以我想到它的方式是有一个WHERE EXISTS或WHERE IN(这意味着在一个名为leader_id的潜在客户表中添加一个字段)并检查新的user_id是否在该团队负责人的列表中#39;成员,包括他们自己。

基于上面的例子。

UPDATE lead SET user_id = xxx 
WHERE lead.id = yyy
AND ... 
-- here is where I would check that the user_id xxx is part of the current         
-- user's team which must be a team leader, for example user.id = 1

所以我的思考过程是先获取上一个查询然后检查。

希望这可以解决问题。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您可以使用or

select name
from users
where team_leader = 1 or id = 1

答案 1 :(得分:0)

WITH CTE AS(
  SELECT name,id,team_leader FROM [users]
    WHERE team_leader=1
  UNION ALL
  SELECT u.name,u.id,u.team_leader from [users] u
  JOIN CTE ON CTE.empno=u.team_leader`enter code here`
  and u.team_leader=1
  )
SELECT * FROM CTE