2016-09-08 3 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

이미 부서 아이를 보여주는 쿼리를 만들지 만, 나는이 뭉쳐야 모두 내가이 일의 단계를 알고있는 유일한 start.if 위치를 잘 모릅니다 넣어 어떻게 몰라요, 내가 만들 수 새로운 쿼리 @ PawełDyl –

+0

직원 들간의 관계가 없습니다. 직원 3-1-5-4 간의 연결 고리를 어떻게 찾으십니까? – Polux2

+0

내가 만든 관계는 일대 다 (역할 -> IdRole, 부서 -> 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