≪データベース|Database|Employee|Employee|Employee|Employee|Employee|Employee|Employee|Employee|Employee|Employee|Employee|Emp

1465 ワード

元のテーマはこうです.
±—±---------------------+|Id|Name|Salary|ManagerId|±---------------------+|1|Joe|70000|3||2|Henry|80000|4||3|Sam|60000|NULL||4|Max|90000|NULL|±----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ここで、ManagerIdが自己反転Idで対応する給与Salaryを見つけるには、SQLクエリ文を作成することによって従業員のSalaryがManagerのSalaryより高い名前を見つける方法が問題となります.上記の表の内容であれば、クエリ文によって出力された結果は、次のようになります.
元のEmployeeテーブルで対応するManagerのSalaryを検索し、その結果を元のテーブルEmployeeと接続して新しいテーブルを作成し、新しいテーブルの上で、直接給与比較関係を利用して元の結果を得るという考え方です.
私のクエリ文は次のとおりです.
 select distinct (Name) as "Employee" from ((
(select t1.Id,t1.Salary as Managersalary
 from Employee as t1, Employee as t2 
 where  t1.Id= t2.ManagerId)  as f
 right join  Employee on Employee.ManagerId= f.Id) 
    )  where Salary>Managersalary AND Managersalary is not null

t 1とt 2のテーブルは元のEmployeeのままであり、ここでは2つのテーブルの違いを区別して混同を防止するため、t 1は元のIdをマッチングするため、t 2はManagerIdをマッチングするため、結果として対応するManagerのSalaryをフィルタリングし、つまりManagerの給与表を単独でフィルタリングしてf.と元のEmployeeテーブルを右に接続し、このとき得られたテーブルには、フィールドSalaryとManageSalaryが存在します.実行結果は答えと一致しますが、コミットすると、他のインスタンスが間違っていることがわかります.指図を頼む.ネット上でネットユーザーの検索文を見つけたのは正しいです.
select a.Name as 'Employee' from Employee a left join Employee b
 on a.ManagerId=b.Id
where a.Salary > b.Salary and a.ManagerId is not null

彼はもっと簡単に見える.