【问题标题】:Adjacency Model MySQL syntax邻接模型 MySQL 语法
【发布时间】:2011-03-08 14:17:58
【问题描述】:

我使用邻接模型来表示子/父关系。

它被用来反映公司层次结构,其中每个员工都有一个经理。员工和经理都存储在同一个表中 - 因此 managerID 字段是指特定经理的用户 ID。

下面是我的表结构: 用户 ID - 电子邮件 - 密码 - 名字 - 姓氏 - 办公室 ID - 部门 ID - 经理 ID - 角色 ID - 用户名

因此 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

但是,我不确定如何显示经理的姓名。

任何帮助将不胜感激。

【问题讨论】:

    标签: mysql sql


    【解决方案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);
    

    【讨论】:

      【解决方案2】:

      只需使用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
      

      【讨论】:

        【解决方案3】:

        如果每个用户都有一个经理(并且 managerID 不为空),您可以安全地将 LEFT JOIN 更改为内部 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
        

        【讨论】:

          猜你喜欢
          • 2012-06-15
          • 1970-01-01
          • 2015-10-16
          • 1970-01-01
          • 1970-01-01
          • 2011-04-07
          • 2011-05-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多