2010-04-04 125 views
0

我有2个表格:第1个持有员工(任何职位的员工)和第2个持有管理人员与ID号码的员工关系。同一张表,1个字段到2个字段的查询

我想写像

1st field: name(employee), 
2nd field: name(manager) 

查询我怎样才能做到这一点?

回答

2

无需嵌套查询,只需使用标准连接:

select e.*, m.* 
from 
    employee e 
    left join employee_managers em 
     on e.id = em.emp_id 
    left join employee m 
     on m.id = em.man_id 

每行将包含employee的所有字段(如果一个员工有几个关联的经理,则可能有多行)以及他对应经理的所有字段(如果员工没有经理,则为NULL)。

+0

是的,我的解决方案正好在上面,ems mysql manager为我做了这个机会。 :) – edib 2010-06-10 13:15:53

1

你可以做一个表:

Employee 
-------- 
EmployeeId int 
Name varchar(50) 
ManagerId int 

ManagerId指向经理在同一个表项。首席执行官的经理ID将为null。一个例子表定义:

create table Employees (
    EmployeeId int auto_increment primary key 
, Name varchar(50) 
, ManagerId int 
, foreign key (ManagerId) references Employees(EmployeeId) 
); 

一些示例数据:

insert into Employees (Name) select 'The Chief'; 
insert into Employees (Name, ManagerId) select 'Grunt 1', 
    (select EmployeeId from Employees where Name = 'The Chief'); 
insert into Employees (Name, ManagerId) select 'Grunt 2', 
    (select EmployeeId from Employees where Name = 'The Chief'); 
insert into Employees (Name, ManagerId) select 'Secretary', 
    (select EmployeeId from Employees where Name = 'The Chief'); 

找到第二步兵的经理的名字,你可以查询,如:

select mgr.Name 
from Employees mgr 
inner join Employees grunt 
on grunt.managerid = mgr.employeeid 
where grunt.name = 'Grunt 2'; 
+0

我认为他们在作者的情况下是多对多的。 – incarnate 2010-04-04 17:49:24

+1

@incarnate:对....误解了这个问题。您的答案已经有了正确的解决方案我会为它投票 – Andomar 2010-04-04 18:01:44

+0

如果您想重构他们的数据库:-) +1,您的工作仍然是一个很好的解决方案。 – bernie 2010-04-04 18:03:13

相关问题