2011-05-25 59 views
3

林具有如下表,每个员工都有一个管理者,如果一个人是他自己的经理巢穴经理ID字段为空,我想emid name and manager id作为结果表的名字是员工与mysql中的相同表加入?

emid name managerid 
1 raj null 
2 ram 1 
3 ravi null 
4 arvind 3 
5 rithu 2 

,我想结果作为

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

回答

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 
+0

Stefanelli:谢谢你这是我真正想要的,m听到第一次关于COALESC,现在使用谷歌搜索,你能解释一下 – kiran 2011-05-25 16:15:56

+0

@kiran:'COALESCE'将返回列表中的第一个非null参数,或者如果全部返回NULL参数是NULL。 mysql的文档是[here](http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html#function_coalesce)。 – 2011-05-25 16:19:07

1

UNTESTED:

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

这只会产生谁实际上有一个经理的雇员。但这就是你如何参加一个表格本身。

+0

但我怎么能为那些空值获取名称 – kiran 2011-05-25 16:04:47

+0

乔·斯特凡内利公布答案。 – Hyperboreus 2011-05-25 16:07:49

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 

OR

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