2010-04-04 166 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

相關問題