表: 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。当满足下面一个条件时,就被认为是雇员的信息丢失:
雇员的姓名丢失了,或者 雇员的薪水信息丢失了,或者 返回这些雇员的id,从小到大排序。
查询结果格式如下面的例子所示:
Employees table: +-------------+----------+ | employee_id | name ? ? | +-------------+----------+ | 2 ? ? ? ? ? | Crew ? ? | | 4 ? ? ? ? ? | Haven ? ?| | 5 ? ? ? ? ? | Kristian | +-------------+----------+ Salaries table: +-------------+--------+ | employee_id | salary | +-------------+--------+ | 5 ? ? ? ? ? | 76071 ?| | 1 ? ? ? ? ? | 22517 ?| | 4 ? ? ? ? ? | 63539 ?| +-------------+--------+
Result table: +-------------+ | employee_id | +-------------+ | 1 ? ? ? ? ? | | 2 ? ? ? ? ? | +-------------+ 雇员1,2,4,5 都工作在这个公司。
1号雇员的姓名丢失了。 2号雇员的薪水信息丢失了。
下面方式等价于全连接!!!
# Write your MySQL query statement below
SELECT t.employee_id
FROM (
(
SELECT e.employee_id FROM Employees AS e
LEFT JOIN Salaries AS s
ON e.employee_id = s.employee_id
WHERE s.employee_id IS NULL
)
UNION
(
SELECT s.employee_id FROM Salaries AS s
LEFT JOIN Employees AS e
ON s.employee_id = e.employee_id
WHERE e.employee_id IS NULL
)
) AS t
ORDER BY t.employee_id ASC;
|