2014-07-24 286 views
0

這是前一個問題的一個分支 - 我有代碼看起來像這樣嵌套選擇選擇

select EMPLOYEE_NAME, 
     HIRE_DATE, 
     IFNULL(SALARY,0), 
     manager_id, 
     (select ifnull(employee_name,"unkown") from employee b where b.employee_id = a.manager_id) 

from employee a 
order by a.EMPLOYEE_NAME; 

我希望出現在單詞「未知」如果沒有經理的價值。

基本上它是一張帶有員工ID和經理ID的大型表格。 (和經理ID相當於員工ID),所以我可以得到那些正確加入的列表,但空白出來空白...請指教。

+0

您是否想要一份員工名單和他們的經理姓名? –

回答

0
select EMPLOYEE_NAME, 
     HIRE_DATE, 
     coalesce(SALARY,0), 
     manager_id, 
     coalesce(b.employee_name,'unknown') as manager_name 

from employee a 
left join employee b on b.employee_id = a.manager_id 
order by a.EMPLOYEE_NAME; 
+0

我不得不將雙引號更改爲未知的單引號,但它工作。什麼是合併? – YelizavetaYR

+0

更正了引號 - 合併是每個RDBM具有的ifnull/isnull/nvl的ANSI等效值。融合存在於所有它們中,因此它更具可轉移性。 – Andrew

+0

合併與IsNull,NVL等不一樣...請參閱:http://stackoverflow.com/questions/7408893/using-isnull-vs-using-coalesce-for-checking-a-specific-condtion –

0

使用外連接查找管理器名稱。

select EMPLOYEE_NAME, 
     HIRE_DATE, 
     IFNULL(SALARY,0), 
     IFNULL(b.EMPLOYEE_NAME, 'unknown') as 'MANAGER_NAME' 

from employee a 
left outer join employee b on a.manager_id = b.employee_id 
order by a.EMPLOYEE_NAME; 
+0

這也適用。我只需要調整select語句的別名(就像我必須對上面的解決方案所做的那樣)。它的工作。謝謝 – YelizavetaYR

+0

已編輯:將SQL格式化爲代碼塊。 – Andrew

+0

感謝安德魯需要刷新我的格式化技能;) – Rusty1