我有2个表格:第1个持有员工(任何职位的员工)和第2个持有管理人员与ID号码的员工关系。同一张表,1个字段到2个字段的查询
我想写像
1st field: name(employee),
2nd field: name(manager)
查询我怎样才能做到这一点?
我有2个表格:第1个持有员工(任何职位的员工)和第2个持有管理人员与ID号码的员工关系。同一张表,1个字段到2个字段的查询
我想写像
1st field: name(employee),
2nd field: name(manager)
查询我怎样才能做到这一点?
无需嵌套查询,只需使用标准连接:
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
)。
你可以做一个表:
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';
是的,我的解决方案正好在上面,ems mysql manager为我做了这个机会。 :) – edib 2010-06-10 13:15:53