我有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