【问题标题】:How to get employees listed under their manager? SQL如何让员工列在他们的经理之下? SQL
【发布时间】:2017-08-19 20:29:17
【问题描述】:

我有一个数据库:

Staff   Name
1       Blake
2       Jake

Mgr     Emp
2       6
2       8
3       5
4       7

是否可以搜索所有员工但将其列在经理下面?

全选:

Staff   Name    Mgr
1       Blake   null
2       Jake    null
6       Scott   2
8       Jack    2
3       Clark   null
5       Martin  3
4       Smith   null
7       Scott   4

有没有办法在搜索员工时查找团队?

搜索:“斯科特”

返回:

Staff   Name    Mgr
2       Jake    null
6       Scott   2
8       Jack    2

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    http://rextester.com/OAREI7219 是解决方案

    CREATE TABLE Managers (
      MgrID int ,
      EmpID int
    )
    
    CREATE TABLE Staff (
      EmpID int,
      name nvarchar(50)
    )
    

    查询是 ;

    SELECT 
        s.EmpID AS Staff,
        s.name AS Name,
        m.MgrID
    FROM Staff s LEFT JOIN Managers m ON s.EmpID = m.EmpID ;
    GO
    

    【讨论】:

      【解决方案2】:

      假设你有:

      • 一张桌子“员工”,里面有公司的所有人。为清楚起见,我将“员工”列重命名为“id”。
      • 一个多对多表“staff_manager”,用于将员工与其经理联系起来。为清楚起见,我将“Mgr”列重命名为“manager_id”,将“Emp”重命名为“employee_id”。
      • 所有以小写和复数命名的表。

      你可以这样做:

      SELECT employees.id, employees.name, managers.id, managers.name
      FROM staff as employees
      LEFT JOIN employee_managers ON (employee_managers.employee_id = employees.id)
      LEFT JOIN staff as managers ON (managers.id = employee_managers.manager_id)
      

      对于第二个查询,您将 where 子句添加到上述查询:

      WHERE managers.name = "Scott" OR employees.name = "Scott"
      

      注意:如果您可以更改数据库的模型,我建议您更改 在 staff_managers 表的employee_id 上设置唯一约束, 这样一名员工只能拥有一名经理。

      【讨论】:

        【解决方案3】:

        让所有员工与他们的经理一起。试试

        Select staff.Id,Staff.name,managers.mgr
        From staff left join managers on staf.id=managers.emp
        

        搜索员工并将他的团队也与经理联系起来。试试

        — 搜索:“斯科特”

        Select staff.Id,Staff.name,managers.mgr
        From staff left join managers on staf.id=managers.emp 
        Where managers.mgr =(select t.mgr from managers as t where t.emp='scott')
        
        Union all
        Select staff.Id,Staff.name,managers.mgr
        From managers left join staff on staf.id=managers.mgr
        Where managers.emp='scott'
        

        【讨论】:

          猜你喜欢
          • 2011-11-19
          • 1970-01-01
          • 2020-03-12
          • 2013-08-02
          • 2021-01-28
          • 2015-09-04
          • 2022-01-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多