私は 2 つのテーブルを持っています: 1 つ目は従業員 (任意のポジションの従業員) を保持し、2 つ目は ID 番号を持つマネージャーと従業員の関係を保持します。
のようなクエリを書きたい
1st field: name(employee),
2nd field: name(manager)
どうやってやるの?
私は 2 つのテーブルを持っています: 1 つ目は従業員 (任意のポジションの従業員) を保持し、2 つ目は ID 番号を持つマネージャーと従業員の関係を保持します。
のようなクエリを書きたい
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
(従業員に複数のマネージャーが関連付けられている場合は、1 人の従業員に対して複数の行が含まれる可能性があります) と、対応するマネージャー (NULL
従業員にマネージャーがいない場合は s) のすべてのフィールドが含まれます。
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';