Sql 合并两列并找到另一个字段的对应名称

Sql 合并两列并找到另一个字段的对应名称,sql,Sql,我有一张名为“职员”的桌子。此表有10列:员工编号、fname、lname、职位、性别、dob、薪资、branchno和经理。如果人事经理有员工编号,则“经理”列为其员工编号,否则为空 我想找到每个员工的名字和他们的经理,如果他们有一个,并合并在一列的名字和姓氏 我的代码如下: SELECT CONCAT(staff.fname, ' ', staff.lname) AS StaffName , CONCAT(staff.fname, ' ', staff.lname) AS ManagerNa

我有一张名为“职员”的桌子。此表有10列:员工编号、fname、lname、职位、性别、dob、薪资、branchno和经理。如果人事经理有员工编号,则“经理”列为其员工编号,否则为空

我想找到每个员工的名字和他们的经理,如果他们有一个,并合并在一列的名字和姓氏

我的代码如下:

SELECT CONCAT(staff.fname, ' ', staff.lname) AS StaffName ,
CONCAT(staff.fname, ' ', staff.lname) AS ManagerName
FROM staff WHERE staff.manager IS NOT NULL AND staff.staffno = staff.manager;

这个代码正确吗?

也许你应该试试这个:

SELECT CONCAT(staff.fname, ' ', staff.lname) AS StaffName,
CONCAT((SELECT fname FROM staff WHERE staff.staffno = staff.manager), ' ', (SELECT lname FROM staff WHERE staff.staffno = staff.manager)) AS ManagerName
FROM staff;

您需要一个
外部联接

CREATE TABLE staff(staffno int, manager int, fname varchar(25),lname varchar(25));
INSERT INTO staff VALUES(1,null,'John','Brown');
INSERT INTO staff VALUES(2,1,'Joe','Miller');
INSERT INTO staff VALUES(3,1,'Julia','Roberts');

SELECT CONCAT(s1.fname, ' ', s1.lname) AS ManagerName ,
       CONCAT(s2.fname, ' ', s2.lname) AS StaffName
  FROM staff s1 
 RIGHT OUTER JOIN staff s2
    ON s1.staffno = s2.manager
 ORDER BY COALESCE(s2.manager,0), s2.staffno; 

 ManagerName    StaffName
 -----------    -----------
                 John Brown
 John Brown      Joe Miller
 John Brown      Julia Roberts
上述SQL适用于标记数据库,如
mysql
postgresql
SQL server


否。如果员工有经理,它只显示两次员工的名字和姓氏。发布问题时,请使用正确的标记。我已删除所有dbms标记。把其中一个放回去,就是实际使用的数据库管理系统。谢谢你的回答。但是我们怎么能考虑这两个条件:1——如果他们有一个管理者2的员工的名字——员工的相应经理的名字?取决于列
ManagerName
是否为空。