在MySQL中如何连接同一张表?

3
我有以下表格,每个员工都有一个经理。如果一个人是自己的经理,则 managerid 字段为 null。我想要将 emid、name 和 manager id 作为结果。表格名称为 employee。
emid name managerid
1    raj  null
2    ram   1
3    ravi   null
4    arvind  3
5    rithu   2

and i want the result as

emid name managername
1    raj  raj
2    ram   raj
3    ravi   ravi
4    arvind  ravi
5    rithu   ram
4个回答

2
SELECT e1.emid, e1.name, COALESCE(e2.name, e1.name) AS managername
    FROM employee e1
        LEFT JOIN employee e2
            ON e1.managerid = e2.emid

Stefanelli:谢谢,这正是我想要的。我第一次听说 COALESC,现在正在搜索它,你能解释一下吗? - kiran
@kiran:COALESCE将返回列表中第一个非空参数,如果所有参数都为空,则返回NULL。它的mysql文档在这里 - Joe Stefanelli

1

未经测试:

select a.name as name, b.name as managername from employee a inner join employee b on a.managerid=b.emid

这将只返回实际拥有经理的员工。但这就是如何在表格本身上进行连接。


但是我该如何获取这些空值的名称? - kiran
Joe Stefanelli发布了答案。 - Hyperboreus

0
select
      e1.emid,
      e1.name,
      COALESCE(e2.name, e1.name ) ManagerName
   from 
      employees e1
         left join employees e2
            on e1.managerid = e2.emid

0
SELECT emid, name,
       CASE WHEN s.managerid IS NULL THEN s.name ELSE m.name END managername
  FROM employees s
  LEFT JOIN employees m ON s.managerid = m.managerid

或者

SELECT emid, name, m.name managername
  FROM employees s
  LEFT JOIN employees m ON COALESCE(s.managerid, s.emid) = m.emid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接