3

列を含む employees というテーブルがあります。

ID | Name | Salary | Department_id | Boss_id

したがって、上司であるかどうかに関係なく、すべての従業員がこれにリストされます。誰かが上司でない場合、Boss_id の値は NULL になります。

目的は、従業員がそれぞれの上司よりも多く稼いでいるかどうかを把握することです。

私はこれを理解しようと取り組んできましたが、すべての部門をループするループが必要なのか、それとももっと簡単な方法があるのか​​ わかりません。

4

2 に答える 2

4

いいえ、ループは必要ありません。

従業員の給与を「上司」の給与と比較したい場合は、JOIN 操作を使用できます。

上司よりも給与が高い従業員のみをリストするには、次のようにします。

SELECT e.*
  FROM employee e
  JOIN employee b
    ON b.id = e.boss_id
   AND e.salary > b.salary

すべての従業員を一覧表示し、上司の給与とともに、従業員の給与が上司の給与よりも高いかどうかを示す列を追加するだけの場合:

SELECT e.*
     , IF(e.salary>b.salary,'Y','N') AS higher_salary_than_boss
     , b.salary AS boss_salary
  FROM employee e
  LEFT
  JOIN employee b
    ON b.id = e.boss_id
 ORDER
    BY e.id

「部門」が実際にどのように機能するのかわかりません。

従業員の給与を上司の給与と比較したい場合は、さらに別の LEFT JOIN を従業員テーブルに追加できます。

于 2013-09-10T17:39:18.810 に答える
2
SELECT t1.ID, t1.Name 
FROM table1 t1 
INNER JOIN table2 t2
ON t1.ID = t2.Boss_id
AND t1.Salary > t2. Salary
AND t1.Department_id = t2.Department_id 
于 2013-09-10T17:38:07.320 に答える