Вы можете сделать это с одной таблицей:
Employee
--------
EmployeeId int
Name varchar(50)
ManagerId int
ManagerId
указывает на запись менеджера в той же таблице. У генерального директора будет ManagerId от 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 сделал это для меня случайно. :) – edib