• 力扣刷题学习SQL篇——1-10 选择(丢失信息的雇员——合并两个表的相同列union all)


    力扣刷题学习SQL篇——1-10 选择(丢失信息的雇员——合并两个表的相同列并去重union all)

    1、题目

    题目链接:https://leetcode.cn/problems/employees-with-missing-information/
    SQL架构

    Create table If Not Exists Employees (employee_id int, name varchar(30))
    Create table If Not Exists Salaries (employee_id int, salary int)
    Truncate table Employees
    insert into Employees (employee_id, name) values ('2', 'Crew')
    insert into Employees (employee_id, name) values ('4', 'Haven')
    insert into Employees (employee_id, name) values ('5', 'Kristian')
    Truncate table Salaries
    insert into Salaries (employee_id, salary) values ('5', '76071')
    insert into Salaries (employee_id, salary) values ('1', '22517')
    insert into Salaries (employee_id, salary) values ('4', '63539')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    表: Employees
    +-------------+---------+
    | Column Name | Type    |
    +-------------+---------+
    | employee_id | int     |
    | name        | varchar |
    +-------------+---------+
    employee_id 是这个表的主键。
    每一行表示雇员的id 和他的姓名。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    表: Salaries

    +-------------+---------+
    | Column Name | Type    |
    +-------------+---------+
    | employee_id | int     |
    | salary      | int     |
    +-------------+---------+
    employee_id is 这个表的主键。
    每一行表示雇员的id 和他的薪水。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    写出一个查询语句,找到所有 丢失信息 的雇员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号雇员的薪水信息丢失了。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    2、解法

    这里是进行两个列的合并,因为你通过表连接也是完不成的,没有办法新增一行数据吧,除非你把两个表的数据合在一起新增一下。
    这里使用union all这个是对结果相同列进行整合的,需要去重和排序请使用union

    select employee_id from Employees e where e.employee_id not in (select employee_id from Salaries)
    union all 
    select employee_id from Salaries s where s.employee_id not in (select employee_id from Employees)
    order by employee_id
    
    • 1
    • 2
    • 3
    • 4

    知识补充

    之前的一篇介绍过union了,就不再次说明了,可以去看补充说明那里
    https://blog.csdn.net/weixin_43987277/article/details/126178098

  • 相关阅读:
    神经网络过拟合怎么解决,神经网络过拟合怎么办
    Java的序列化
    图的创建(邻接表,邻接矩阵)(浙大数据结构代码)
    阿里云国际版两个ECS云服务器之间的迁移教程
    Redis 的三种部署模式
    互斥锁,自旋锁,读写锁
    前端与后端:有什么区别?
    LeetCode解法汇总2591. 将钱分给最多的儿童
    c语言、c++扩展介绍 ————柔性数组、零长数组。
    如何从异步调用中返回响应
  • 原文地址:https://blog.csdn.net/weixin_43987277/article/details/126422477