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

时间:2018-06-13 04:41:29

标签: sql

我有一个表名"员工"。这个表有10列:staffno,fname,lname,position,sex,dob,salary,branchno和manager。专栏"经理"如果他/她有一个人员经理的职员,否则为NULL。

我想找到每个工作人员及其经理的姓名,如果他们有一个,并在一栏中合并名字和姓氏。

我的代码如下:

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;

这段代码是否正确?

2 个答案:

答案 0 :(得分:1)

您需要 OUTER JOIN

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 适用于标记数据库,例如mysqlpostgresqlsql-server

SQL Fiddle Demo

答案 1 :(得分:0)

也许你应该尝试这个:

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;