订阅更新

收入超过经理的员工:表和自己关联

SQL 实战 123 题 · 第 6 题 简单 约 2 分钟读完

LeetCode 181 · 自连接

本文目录
  1. 面试怎么回答
  2. 题意
  3. 表结构
  4. 思路
  5. 参考解法
  6. 易错点

面试怎么回答

经理和员工在同一张表,用自连接。把表当成员工 a 和经理 b 两份,按 a.ManagerId = b.Id 关联,再筛选 a.Salary > b.Salary。没有经理的员工在内连接里会被排除,正好符合题意。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

题意

员工表里每个员工都有一个经理 ID,经理本身也是员工表里的一行。找出薪水比自己经理还高的员工姓名。

表结构

  • Employee:Id(主键)、Name、Salary、ManagerId(经理也是员工,可能为空)

思路

员工和经理在同一张表里,用自连接:一份当员工 a,一份当经理 b,用 a.ManagerId = b.Id 关联,再比较两边薪水。没有经理的人 ManagerId 为 NULL,内连接自然把他们排除了。

参考解法

select a.Name  Employee 
from Employee a 
join Employee b
on a.ManagerId = b.id
where a.Salary>b.Salary

易错点

  • 关联条件写反成 a.Id = b.ManagerId,变成找「比下属收入高的人」。
刷题进度保存在当前浏览器