2011-03-08 3 views
0

나는 인접 관계 모델을 사용하여 하위/부모 관계를 나타 냈습니다.인접 모델 MySQL 구문

각 직원에게 관리자가있는 회사 계층을 미러링하는 데 사용됩니다. 직원과 관리자는 모두 같은 테이블에 저장되므로 managerID 필드는 특정 관리자의 userID를 나타냅니다.

다음은 내 테이블 구조입니다 : 아이디 - 이메일 - 비밀번호 - firstName을 -이 lastName - officeID - departmentID - 관리자 ID - 역할 ID -

그래서 관리자 ID가 외래 키하지만 동일한 스키마에서 유래 이름.

내가 시도한 것은 시스템 사용자와 관련된 정보 (관리자 정보 포함)가 포함 된 테이블을 표시하는 것입니다.

지금까지 나는이 사용하는 여러가 다음과 같은 SQL 문을 조인 달성 :

SELECT user.firstName, user.lastName, office.officeName, department.departmentTitle, role.roleName 
FROM user, office, department, role 
WHERE user.officeID = office.officeID 
AND user.departmentID = department.departmentID 
AND user.roleID = role.roleID 

그러나, 나는 매니저의 이름을 표시하는 방법에 대한 확신입니다.

도움을 주시면 감사하겠습니다. 당신이 안전하게 LEFT를 변경할 수있는 모든 사용자가 관리자가 (및 관리자 ID가 null가 아닌) 경우

답변

1

쿼리는 사용자를 끌어옵니다. 관리자 이름을 얻으려면 다음과 같이 사용자 테이블을 다시 조인해야합니다.

SELECT u.firstName, u.lastName, 
     o.officeName, d.departmentTitle, 
     r.roleName, 
     m.firstName AS mFN, m.lastName AS mLN 
FROM user u JOIN office o ON (u.officeID = o.officeID) 
      JOIN department d ON (u.departmentID = d.departmentID) 
      JOIN role r ON (u.roleID = r.roleID) 
      JOIN user m ON (u.manager_id=m.user_id); 
1

그냥 managerID=m.userID 조건으로 다시 한 번 사용자 테이블에 가입

m.firstNamem.lastName은 관리자의 이름

SELECT user.firstName, user.lastName, m.firstName,m.lastName, office.officeName, department.departmentTitle, role.roleName 
FROM user as u, user as m, office, department, role 
WHERE u.officeID = office.officeID 
AND u.departmentID = department.departmentID 
AND u.roleID = role.roleID 
AND u.managerID=m.userID 
1

있습니다 내부 JOIN에 가입하십시오.

SELECT u.firstName 
    , u.lastName 
    , office.officeName 
    , department.departmentTitle 
    , role.roleName 
    , manager.firstName AS managerFirstName 
    , manager.lastName AS managerLastName 
    FROM user AS u 
    JOIN office 
     ON u.officeID = office.officeID 
    JOIN department 
     ON u.departmentID = department.departmentID 
    JOIN role 
     ON u.roleID = role.roleID 
    LEFT JOIN user AS manager 
     ON u.managerID = manager.userID