这是我最近在一次采访中被问到的一个问题:
您在组织中有各种类型的用户:(Junior
被老板)Supervisor
(被老板)Manager
(被老板)CEO
。
我们同意这个单一的简化表模式。用户:{userId, userName, UserType(J, S, M, C), bossUserId}
问:编写一个查询来确定Junior
userId = 11 的员工的完整组织层次结构。
样本数据 :
答案是 =>PQR2 --> GHI2 --> DEF1 --> ABC1
这是我的解决方案:
select e1.userName, e2.userName, e3.userName, e4.userName from
abc e1 inner join users e2 on e1.bossUserId = e2.userId
inner join users e3 on e2.bossUserId = e3.userId
inner join users e4 on e3.bossUserId = e4.userId
where e1.userId = 11;
我确实意识到自我加入 4 次是可怕的,但我无法想到其他任何事情。面试官告诉我有更好的方法,数据会出现 columnwise
。(使用最大值of 2 self joins
,如果有的话)
另一种可能性是编写一个存储过程,但它又不是一个单一的查询。
谁能帮我这个?