Модель смежности Синтаксис MySQL - PullRequest
0 голосов
/ 08 марта 2011

Я использовал модель смежности для представления отношений ребенок / родитель.

Он используется для отражения иерархии компаний, где у каждого сотрудника есть менеджер. И сотрудники, и менеджеры хранятся в одной таблице, поэтому поле managerID ссылается на идентификатор пользователя конкретного менеджера.

Ниже приведена структура моей таблицы: userID - электронная почта - пароль - firstName - lastName - officeID - отдел ID - managerID - roleID - имя пользователя

Таким образом, managerID является внешним ключом, но происходит из той же схемы.

То, что я пытаюсь сделать, это отобразить таблицу, содержащую информацию о пользователях системы, включая информацию о том, кто их менеджер.

До сих пор я достигал этого, используя несколько объединений со следующим оператором 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

Однако я не уверен, как отобразить имена менеджеров.

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

1 голос
/ 08 марта 2011

Если у каждого пользователя есть менеджер (а managerID не равен нулю), вы можете смело превращать ЛЕВОЕ СОЕДИНЕНИЕ во внутреннее СОЕДИНЕНИЕ.

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
1 голос
/ 08 марта 2011

Ваш запрос тянет только пользователей.Чтобы получить имя менеджера, вам нужно снова присоединиться к пользовательской таблице, например:

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 голос
/ 08 марта 2011

Просто присоединитесь к пользовательской таблице еще раз с managerID=m.userID условие

m.firstName и m.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...