我正在通过MySQL版本5.7.17学习,请澄清我下面的疑问。
我有一个表employees,其中包含员工I和相应的经理I,但很少有员工没有经理I,因为他们属于经理角色。
表列是员工id、名字、姓氏、经理id。我设计了下面的自连接查询,它为我提供了具有经理I的员工,但我正在寻找没有经理I(空)的经理(也是员工)的其他详细信息。
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服务器版本对应的手册,了解正确的语法,以便在第2行使用near 'NULL(M.EMPLOYEE_ID,'NO MGR') AS MGR_ID,CONCAT(M.FIRST_NAME,‘',M.LAST_NAME) AS’
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发布于 2017-02-19 20:52:21
您可以使用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_IDhttps://stackoverflow.com/questions/42327399
复制相似问题