これは私が最近インタビューで尋ねられた質問でした:
組織にはさまざまなタイプのユーザーがいます: Junior
(上司) Supervisor
(上司) Manager
(上司) CEO
.
この単一の単純化されたテーブル スキーマに合意しました。ユーザー :{userId, userName, UserType(J, S, M, C), bossUserId}
Q :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
)
もう 1 つの可能性は、ストアド プロシージャを作成することでしたが、これも単一のクエリではありません。
誰でもこれで私を助けることができますか?