【问题标题】:Using subquery for the same table in MySQL在 MySQL 中对同一张表使用子查询
【发布时间】:2016-05-07 17:16:28
【问题描述】:

我有一个名为Staff 的表,其中包含以下字段:idStaff, Name, Phone, Email, SupervisorId

SuervisorId 是该员工主管的idStaff

我想显示所有员工的列表及其基本信息(姓名、电子邮件等)以及主管的姓名。

所以是这样的:

select idStaff
     , Name
     , Email
     , Phone
     , (select Name from Staff where idStaff = SupervisorId) as SupervisorName 
  from Staff 
 order 
    by Name ASC

查询不起作用。我尝试加入这两个表,但我对如何从联接中的子查询中获取名称感到困惑。

 select idStaff
      , Name
      , Phone
      , Email 
   from Staff a 
  inner 
   join Staff b 
     on a.idStaff = b.SupervisorId 
  order 
     by Name ASC

任何帮助将不胜感激。

【问题讨论】:

    标签: php mysql join inner-join


    【解决方案1】:

    也许是这样的......

    select s1.idStaff
         , s1.Name
         , s1.Email
         , s1.Phone
         , s2.Name as SupervisorName 
    from Staff s1
    LEFT JOIN Staff s2 ON s1.SupervisorId = s2.idStaff
     order 
        by s1.Name ASC
    

    或者你可以做类似......

    select s.idStaff
         , s.Name
         , s.Email
         , s.Phone
         , (select top 1 m.Name from Staff m 
                                where  s.SupervisorId =  m.idStaff) as SupervisorName 
    from Staff s
    order by s.Name ASC
    

    【讨论】:

    • 谢谢,第一个解决方案有效,但如果我想做另一个左连接怎么办。因此,Staff 中还有一个名为 RoleId 的字段,用于查找 Role 表。我想从 idRole = RoleId 的 Role 表中获取 RoleName
    【解决方案2】:

    LEFT JOIN 是您的朋友。尝试这样的查询。查看别名 s(taff) 和 m(ember)

    SELECT m.idStaff
         , m.Name
         , m.Email
         , m.Phone
         , s.Name
      FROM Staff m
      LEFT JOIN Staff s ON s.idStaff = m.SupervisorId
      ORDER BY m.Name ASC;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-07
      • 2020-03-31
      • 2019-05-11
      • 1970-01-01
      • 2014-07-05
      • 2011-09-03
      • 1970-01-01
      • 2017-06-11
      相关资源
      最近更新 更多