2010-04-04 5 views
0

2 번째 테이블이 있습니다. 첫 번째 직원은 어느 위치에 있든 관계없이 두 번째 테이블에는 직원 번호와 관련된 직원 관계가 있습니다.동일한 테이블, 1 필드에서 2 필드 쿼리

내가 그렇게 할 수있는 방법
1st field: name(employee), 
2nd field: name(manager) 

같은 쿼리를 작성하려는

?

답변

2

없음 중첩 된 쿼리 :

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 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 점. CEO는 관리자 ID가 null입니다. 예 테이블 정의 : 몇 가지 예를 들어 데이터와

create table Employees (
    EmployeeId int auto_increment primary key 
, Name varchar(50) 
, ManagerId int 
, foreign key (ManagerId) references Employees(EmployeeId) 
); 

: 필요

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

DB를 리펙토링하려고한다면 여전히 좋은 해결책입니다 :-) +1. – bernie

관련 문제