2010-04-04 3 views
0

У меня есть 2 таблицы: 1-й занимает сотрудников (из них в любой позиции), а второй связан с отношениями сотрудника-менеджера с номерами идентификаторов.та же таблица, 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 сделал это для меня случайно. :) – edib

1

Вы можете сделать это с одной таблицей:

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'; 
+0

Я думаю, что они многие-ко-многим в авторском деле. – incarnate

+1

@incarnate: Правильно .... неправильно прочитал вопрос. У вашего ответа уже есть правильное решение, за которое я проголосую – Andomar

+0

yours по-прежнему является хорошим решением, если они хотят реорганизовать свою БД :-) +1 за усилия. – bernie

Смежные вопросы