当前位置: 首页 > article >正文

[每日一练]利用子查询配合union all进行全连接后丢失数据的查询

#该题目来源于力扣:

1965. 丢失信息的雇员 - 力扣(LeetCode)

题目要求:

表: Employees

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| employee_id | int     |
| name        | varchar |
+-------------+---------+
employee_id 是该表中具有唯一值的列。
每一行表示雇员的 id 和他的姓名。
表: Salaries

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| employee_id | int     |
| salary      | int     |
+-------------+---------+
employee_id 是该表中具有唯一值的列。
每一行表示雇员的 id 和他的薪水。
 

编写解决方案,找到所有 丢失信息 的雇员 id。当满足下面一个条件时,就被认为是雇员的信息丢失:

雇员的 姓名 丢失了,或者
雇员的 薪水信息 丢失了
返回这些雇员的 id  employee_id , 从小到大排序 。

查询结果格式如下面的例子所示。

 

示例 1:

输入:
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 号雇员的薪水信息丢失了。

思路流程:

看到这道题的第一反应就是将这两个数据集全连接起来,然后查询空值就行了。但是MySQL有一个特性,它不支持全部外连接,只支持左右外连接。克服这个问题,可以分别进行查询,最后使用union all/unio 进行连接。

回到题目,他要求我们查询一个员工所丢失的数据,在两张表中,未出现的的数据就是丢失的信息。使用左右连接再继续联合查询太耗时间。我们可以直接利用子查询,通过 in/not in的判断,来直接判断出再一个表中出现的id在另一张表中是否出现,我们要查询缺失值。具体代码如下:

SELECT ID FROM 表1
where ID NOT IN (SELECT ID FROM 表2)

这样就可以查询出表1缺失的数据了。想要查询表2缺失的数据也很容易,对调上面代码“表1”和“表2”的位置就行了。最后用union all/union连接即可:

SELECT ID FROM 表1
WHERE ID NOT IN (SELECT ID FROM 表2)
UNION ALL
SELECT ID FROM 表2
WHERE ID NOT IN (SELECT ID FROM 表1)
UNION ALL
......

代码实现:

明白了实现形式,我们将数据传入代码即可:

SELECT employee_id FROM Employees
WHERE employee_id NOT IN (SELECT employee_id FROM Salaries)
UNION ALL
SELECT employee_id FROM Salaries
WHERE employee_id NOT IN (SELECT employee_id FROM Employees)
ORDER BY employee_id ASC

 

 


http://www.kler.cn/news/341079.html

相关文章:

  • Redis:分布式 - 主从复制
  • 通过阿里云Milvus和LangChain快速构建LLM问答系统
  • 阿里云NAS之间迁移实践
  • Python酷库之旅-第三方库Pandas(141)
  • 自动化测试中如何高效进行元素定位!
  • springboot接口如何支持400并发量
  • postman变量,断言,参数化
  • C++ day05(模版与容器)
  • MySQL高阶2010-职员招聘人数2
  • 前端Javascript常见算法题(一)【待学】
  • Android SELinux——基础介绍(一)
  • 机器学习周报(9.30-10.6)
  • PCL 3D-SIFT关键点检测(曲率不变特征约束
  • 系统架构设计师教程 第12章 12.4 信息系统架构案例分析 笔记
  • 激光增材制造新突破:精细调控NiTi合金弹热效应,实现制冷定制
  • 自动化测试selenium篇(三)
  • PMP--冲刺题--解题--1-10
  • 中阳:引领未来投资的创新金融平台
  • MySQL 篇-深入了解存储引擎、索引(InnoDB 索引结构 B+Tree、索引使用规则)
  • golang接口详解