繁体   English   中英

根据表中的另一个字段选择某个字段

[英]Select certain field based on another field in table

我使用了三张桌子,事实证明这个问题已超出我的范围。

第一个是像这样的层次表

USER_ID, USER_LEVEL, Store_Manager_ID, Team_Manager_ID
------------------------------------------------------
1, 0, -, -
2, 1, 1, -
3, 2, 1, 2
4, 2, 1, 2
5, 2, 1, 2

这仅显示了用户的等级。 因此,用户1的级别为0,这意味着他是商店经理,因此他之上没有商店经理,因此他的商店经理id是什么,而团队经理显然是什么。 第二个用户是团队经理,因此级别= 1,商店经理是1(第一个人)。第三,第四和第五个分别是1和2以下的工人。

第二个是登录表,看起来像这样

USER_ID, EMAIL
--------------------------
1, john.smith@gmail.com
2, ron.jones@gmail.com
3, tom.graham@gmail.com
4, bill.small@gmail.com

电子邮件是登录名,没有密码。

第三个是别名表,看起来像这样

USER_ID, ALIAS_ID
--------------------
2, 5

别名表显示用户5如何成为用户2的别名。因此,他是同一个人,并且具有相同的登录名。 但是,他可以同时在该层级中的两个位置,即同时担任团队经理和工人。

我的问题是。 如果我知道用户2将以其别名登录,即登录前为工作人员。 用户2登录后,如何根据级别选择用户帐户的负责人的ID。

例如,如果我使用别名帐户以ron.jones@gmail.com(用户2)身份登录。 用户2的别名ID为5,基于层级用户5为2级,即一个工人,因此我应该返回其团队经理而不是其商店经理的ID。 因此,我将返回2,即他本人(在这种情况下,有点奇怪,但要点除外)

这将为您提供所需的答案(如果我正确理解了该问题):

SELECT team_manager_id
FROM   hierarchy h
INNER JOIN aliases a ON h.user_id = a.alias_id 
INNER JOIN login l ON a.user_id = l.user_id
WHERE  email = 'ron.jones@gmail.com';
Select user_ID, User_level, Store_Manager_ID, Team_Manager_ID 
FROM Hierachy H 
INNER JOIN Alias A on A.Alias_ID = H.User_Id
Where A.User_ID = 2

假设:一个用户的1个别名不超过1个,如果别名相同,您将获得同一用户的多个记录。

假设您不关心层次2中的记录,因为您所追求的只是5。

如果我理解正确,那么您希望基于用户或用户别名的用户管理者。

以下查询执行两次联接,一次联接到用户表,一次联接到别名表:

SELECT team_manager_id
FROM h.user_id = a.alias_id INNER JOIN
     login l
     ON a.user_id = l.user_id join
     hierarchy huser
     on huser.user_id = a.alias_id join
     hierarchy halias
     on halias.user_id = l.user_id
WHERE l.email = 'ron.jones@gmail.com' and
      huser.team_manager_id is not null and
      halias.team_manager_id is not null

它还检查管理器是否不为空,仅返回别名上的管理器。 这将返回所有此类管理器。 您是否需要一个特定的对象,比如说层次结构的最低层?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM