Вы можете сделать это с одной таблицей:
Employee
--------
EmployeeId int
Name varchar(50)
ManagerId int
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';