如果为null函数,MySQL自连接

时间:2017-02-19 12:50:24

标签: mysql

我正在通过MySQL Ver.5.7.17学习,请在下面的查询中说明。

我有一个表员工,其中包含员工ID和相应的经理ID,但很少有员工没有经理ID,因为他们属于经理角色。

表格列是员工ID,名字,姓氏,经理ID。我在下面设计了自我加入查询,它为我的员工提供了经理ID,但我正在寻找没有经理人ID(null)的经理(他们也是员工)的其他详细信息。

SELECT E.EMPLOYEE_ID AS EMP_ID, CONCAT(E.FIRST_NAME,' ',E.LAST_NAME
) AS EMP_NAME, 
M.EMPLOYEE_ID AS MGR_ID
,CONCAT(M.FIRST_NAME,' ',M.LAST_NAME) AS MGR_NAME
FROM EMPLOYEES AS E JOIN EMPLOYEES AS M 
ON (E.MANAGER_ID =M.EMPLOYEE_ID) ORDER BY MGR_ID

我在查询中尝试使用IF NULL函数,如下所示,并得到以下错误消息。

错误代码:1064。您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'NULL(M.EMPLOYEE_ID,'NO MGR')附近使用正确的语法AS MGR_ID,CONCAT(M.FIRST_NAME,'',M.LAST_NAME)AS'在第2行

SELECT E.EMPLOYEE_ID AS EMP_ID, CONCAT(E.FIRST_NAME,' ',E.LAST_NAME) AS EMP_NAME, 
IF NULL(M.EMPLOYEE_ID,'NO MGR') AS MGR_ID
,CONCAT(M.FIRST_NAME,' ',M.LAST_NAME) AS MGR_NAME
FROM EMPLOYEES AS E JOIN EMPLOYEES AS M 
ON (E.MANAGER_ID =M.EMPLOYEE_ID) ORDER BY MGR_ID

1 个答案:

答案 0 :(得分:0)

您可以使用COALESCE。另外,我认为你需要一个左连接才能获得那些没有经理的记录:

select E.EMPLOYEE_ID as EMP_ID,
    concat (E.FIRST_NAME,' ',E.LAST_NAME) as EMP_NAME,
    coalesce(M.EMPLOYEE_ID, 'NO MGR') as MGR_ID,
    concat (M.FIRST_NAME,' ',M.LAST_NAME) as MGR_NAME
from EMPLOYEES as E
left join EMPLOYEES as M on (E.MANAGER_ID = M.EMPLOYEE_ID)
order by MGR_ID