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