一、问题描述
表: Employees
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| employee_id | int |
| name | varchar |
+-------------+---------+
employee_id 是这个表的主键。
每一行表示雇员的id 和他的姓名。
复制代码
表: Salaries
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| employee_id | int |
| salary | int |
+-------------+---------+
employee_id is 这个表的主键。
每一行表示雇员的id 和他的薪水。
复制代码
写出一个查询语句,找到所有 丢失信息 的雇员id
。当满足下面一个条件时,就被认为是雇员的信息丢失:
查询结果格式如下面的例子所示。
题目链接:丢失信息的雇员
二、题目要求
样例
输入:
Employees table:
+-------------+----------+
| employee_id | name |
+-------------+----------+
| 2 | Crew |
| 4 | Haven |
| 5 | Kristian |
+-------------+----------+
Salaries table:
+-------------+--------+
| employee_id | salary |
+-------------+--------+
| 5 | 76071 |
| 1 | 22517 |
| 4 | 63539 |
+-------------+--------+
输出:
+-------------+
| employee_id |
+-------------+
| 1 |
| 2 |
+-------------+
解释:
雇员1,2,4,5 都工作在这个公司。
1号雇员的姓名丢失了。
2号雇员的薪水信息丢失了。
复制代码
考察
1.union连接、子查询
2.建议用时10~25min
复制代码
三、问题分析
这一题主要考察数据的筛选问题,题目要求我们求出没有姓名
或者没有工资
的员工编号,最后对结果按照编号升序排列。
可以拆分成两部分:
最后将两个表的结果组合起来,利用order by
排序输出。
四、编码实现
select employee_id
from Employees
where employee_id not in(select employee_id from Salaries )
union
select employee_id
from Salaries
where employee_id not in(select employee_id from Employees )
order by employee_id
复制代码
五、测试结果
评论