我有一个表名"员工"。这个表有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;
这段代码是否正确?
答案 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 适用于标记数据库,例如mysql
,postgresql
和sql-server
。
答案 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;