题目:

577.员工奖金
表:Employee

±------------±--------+
| Column Name | Type |
±------------±--------+
| empId | int |
| name | varchar |
| supervisor | int |
| salary | int |
±------------±--------+
empId 是该表中具有唯一值的列。
该表的每一行都表示员工的姓名和 id,以及他们的工资和经理的 id。

表:Bonus

±------------±-----+
| Column Name | Type |
±------------±-----+
| empId | int |
| bonus | int |
±------------±-----+
empId 是该表具有唯一值的列。
empId 是 Employee 表中 empId 的外键(reference 列)。
该表的每一行都包含一个员工的 id 和他们各自的奖金。

编写解决方案,报告每个奖金少于 1000 的员工的姓名和奖金数额。

以 任意顺序 返回结果表。

结果格式如下所示。

示例 1:

输入:
Employee table:
±------±-------±-----------±-------+
| empId | name | supervisor | salary |
±------±-------±-----------±-------+
| 3 | Brad | null | 4000 |
| 1 | John | 3 | 1000 |
| 2 | Dan | 3 | 2000 |
| 4 | Thomas | 3 | 4000 |
±------±-------±-----------±-------+
Bonus table:
±------±------+
| empId | bonus |
±------±------+
| 2 | 500 |
| 4 | 2000 |
±------±------+
输出:
±-----±------+
| name | bonus |
±-----±------+
| Brad | null |
| John | null |
| Dan | 500 |
±-----±------+

思路:

由于这次是双表,需凭借empId列将两张表拼接在一起才能获得结果,所以考虑join关键词。结合题目要求为“每个奖金少于 1000 的员工的姓名和奖金数额”,所以使用left join关键词(存在员工奖金为null的情况
需要找的是员工的姓名和奖金数额,那么select寻找的就是name、bonus。

代码:

SELECT e.name,b.bonus
FROM Employee AS e
LEFT JOIN Bonus AS b
ON e.empId = b.empId
WHERE b.bonus < 1000 OR b.bonus IS NULL
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐