首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >邻接模型MySQL语法

邻接模型MySQL语法
EN

Stack Overflow用户
提问于 2011-03-08 14:17:58
回答 3查看 234关注 0票数 0

我用邻接模型来表示一个孩子/父母的关系。

它被用来反映公司的等级制度,每个员工都有一名经理。员工和经理都存储在同一个表中,因此managerID字段引用特定经理的userID。

以下是我的表结构:userID -电子邮件-密码- firstName - lastName - officeID - departmentID - managerID - roleID -用户名

因此,managerID是一个外键,但来源于相同的模式。

我想要做的是显示一个包含系统用户的信息的表格--包括他们的经理。

到目前为止,我已经使用以下SQL语句使用多个联接实现了这一点:

代码语言:javascript
复制
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

然而,我不知道如何显示经理的名字。

任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-08 14:25:59

您的查询只会吸引用户。要获得经理名称,您需要再次加入user表,如下所示:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-03-08 14:23:04

只需使用managerID=m.userID条件再次加入用户表

m.firstNamem.lastName是经理的名字

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-03-08 14:24:41

如果每个用户都有一个管理器(而且managerID不是null),那么您可以安全地将左连接更改为内部连接。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5233677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档