0

私は 2 つのテーブルを持っています: 1 つ目は従業員 (任意のポジションの従業員) を保持し、2 つ目は ID 番号を持つマネージャーと従業員の関係を保持します。

のようなクエリを書きたい

1st field: name(employee), 
2nd field: name(manager)

どうやってやるの?

4

2 に答える 2

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(従業員に複数のマネージャーが関連付けられている場合は、1 人の従業員に対して複数の行が含まれる可能性があります) と、対応するマネージャー (NULL従業員にマネージャーがいない場合は s) のすべてのフィールドが含まれます。

于 2010-04-04T17:54:35.327 に答える
1

1 つのテーブルでそれを行うことができます。

 Employee
 --------
 EmployeeId int
 Name varchar(50)
 ManagerId int

ManagerId同じテーブル内のマネージャーのエントリを指します。CEO の 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');

2 番目の Grunt のマネージャーの名前を見つけるには、次のようにクエリできます。

select mgr.Name
from Employees mgr
inner join Employees grunt
on grunt.managerid = mgr.employeeid
where grunt.name = 'Grunt 2';
于 2010-04-04T17:36:04.597 に答える