2011-05-25 77 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