如何使用MySQL CONCAT结合同表关联实现Report_to字段转对应姓名
问题原因
你现有查询的逻辑是在单条记录内部比对Report_to和pkey是否相等,你的业务数据里没有自己向自己汇报的记录,所以所有判断都走到ELSE分支,才会全返回no one。要实现你的需求,需要用到自连接查询,把同一张表分别映射为「员工表」和「汇报对象表」做关联匹配。
正确SQL语句
假设你的业务表名为employee,可直接使用如下查询:
SELECT e1.Name AS `Name`, COALESCE(e2.Name, '') AS `Report_to` FROM employee e1 LEFT JOIN employee e2 ON e1.Report_to = e2.pkey;
逻辑说明
- 用
LEFT JOIN左自连接的原因是要保留无汇报对象的员工(也就是Report_to为空的记录),如果用INNER JOIN会漏掉pkey=14的dfg这条记录 COALESCE(e2.Name, '')的作用是当没有匹配到汇报对象时,返回空字符串,符合你无汇报对象留空的需求- 你可以直接替换
employee为你实际的业务表名即可正常执行
内容的提问来源于stack exchange,提问作者sai
相关产品推荐
相关产品推荐

