2016-09-08 39 views
-2

マネージャの下にある従業員を示すクエリを作成したいとします。
SQL上に5つのテーブルを使用します。
ここに私のデータベースの例があります。
複数のテーブルSQL Serverを使用して階層を再帰的に作成

Department Table 
id   dept   parent 
1   HR 
2   Financial  1 
3   Research  1 
4   Loans   2 
5   Marketing  3 

Role Table 
id   role   parent 
1   Commissioner  
2   Director  1 
3   Manager  2 
4   Supervisor  3 
5   Staff   4 

deptrole Table 
id   iddept  idrole 
1   1   1 
2   1   2 
3   1   3 
4   1   4 
5   1   5 

Biography Table 
id   name   regnumber 
1   Bob    N1 
2   John   N2 
3   Roxy   N3 
4   Ian    N4 
5   Will   N5 

Employee Table 
id   IdBio  deptrole 
1   1   3 
2   2   1 
3   3   2 
4   4   5 
5   5   4 

時にクエリに、私は、入力されたID(WHERE EMPID = 1)EMPID = 2は、子供がEMPIDであるとき、そのIDが1以下の従業員を示し、それはその後4.and EMPID 5こととなり3-1-5-4。
どうしたのですか?

+0

私はすでに部門の子を示すためのクエリを作成しますが、私はこれらのtogether.iのすべてが、私はこれを行うための手順を知っている唯一のstart.ifする場所を知らない置けばいいのか知らない、私が作ることができます新しいクエリ@PawełDyl –

+0

従業員の間に関係はありません。どのように従業員3-1-5-4の間のリンクを見つけるのですか? – Polux2

+0

私が作る関係は1対多です(役割 - > IdRole、dept - > IdDept)。これは、私が達成したいものです。EmpId "4" = 3-1-5-4 @ Polux2 –

答えて

0

問題全体を理解しているわけではありませんが、これを試すことができます。

Declare @empid as int; 
SET @empid = 1; 

With A as 
(
    Select id as Subord_role 
    from role 
    WHERE role.parent = (Select deptrole.idrole 
          FROM Employee 
           INNER JOIN deptrole ON deptrole.id = Employee.id 
          WHERE Employee.id = @empid) 
    UNION ALL 

    Select Role.id 
    from deptrole 
     INNER JOIN Role ON deptrole.idrole = Role.id 
     INNER JOIN A ON A.Subord_role = Role.parent 
    Where deptrole.iddept = (Select deptrole.iddept 
          FROM Employee 
           INNER JOIN deptrole ON deptrole.id = Employee.id 
          WHERE Employee.id = @empid) 
) 

Select Employee.id 
FROM Employee 
    INNER JOIN deptrole ON deptrole.id = Employee.id 
    INNER JOIN Role ON role.id = deptrole.idrole 
    INNER JOIN A ON A.Subord_role = Role.id 
+0

このエラー:スカラー変数 "@empid"を宣言しなければなりません。 –

+0

スカラー変数が修正されました。別のエラー:「ステートメントが終了しました。ステートメントの完了前に最大再帰10000が使い果たされました。 。私はすでに最大再帰を0,10000と32767に設定していますが、ループを処理するためにはまだすべてが尽きています。@ Polux2 –

+0

私は自分のクエリに対して修正を加えました。ごめんなさい。 – Polux2

関連する問題