2

次の列を含む従業員というテーブルがあります-

Fname、Lname、ssn (主キー)、給与、スーパーバイザー ssn、部門名。

ここで、部門「研究」に属するテーブル内の各従業員について、名前、給与、上司の名前を出力したいと考えています。私が現在持っているのはこれです。

SELECT fname、salary、superssn from employee where departmentname='Research';

これで、上司の名前ではなく、従業員の上司の ssn のみが得られます。ある従業員の superssn を同じ ssn を持つ別の従業員と比較し、その従業員が上司であるため、その従業員の名前を取得する必要があることはわかっていますが、同じコマンドでこれを実装する方法がわかりません。

4

2 に答える 2

2

次のように、emplyee テーブルへの結合が必要です (また、そのテーブルを参照するためのエイリアスが必要です)。

SELECT employee.fname, employee.salary, supervisorlist.fname as supervisor 
from employee 
left join employee as supervisorlist on supervisorlist.ssn = employee.supervisorssn
where employee.departmentname='Research';
于 2013-10-20T14:26:50.887 に答える
1

自己結合が必要です:

SELECT researcher.fname, researcher.salary, supervisor.fname 
FROM employee researcher JOIN employee supervisor ON researcher.superssn = supervisor.ssn
WHERE researcher.departmentname='Research'; 

これにより、スーパーバイザー/研究者の ssn で一致する従業員 x 従業員の外積から、関連するすべてのペアが得られます。

スーパーバイザーのいない研究者も含めたい場合は、LEFT JOIN が必要です。

于 2013-10-20T14:30:11.310 に答える