【力扣白嫖日记】1965.丢失信息的雇员

前言

练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。

今日题目:

1965.丢失信息的雇员
表:Employees

列名类型
employee_idint
namevarchar

employee_id 是该表中具有唯一值的列。
每一行表示雇员的 id 和他的姓名。息。

表:Salaries

列名类型
employee_idint
salaryint

employee_id 是该表中具有唯一值的列。
每一行表示雇员的 id 和他的薪水。

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

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

我那不值一提的想法:

  • 首先梳理表内容,题干一共给了两张表,一张雇员表,一张薪水表,其中雇员表记录了员工id,姓名,其中薪水表记录了员工id和薪水,两张表可以用员工id相连接
  • 其次分析需求,需要找到所有丢失的雇员id,丢失的条件就是姓名或薪水信息丢失
  • 我的基本思路就是要找到第一张表有第二张表没有第一张表没有第二张表有的数据
  • 首先计算第一张表有,第二张表没有的数据,也就是左连接,这样没有的数据就会显示null,我们利用筛选条件where e.name is null or s.salary is null,就能得到第一张表有,第二张表没有的数据
  • 其次计算第一张表没有,第二张表有的数据,也就是右连接,同样,没有的数据就会显示null,利用同样的筛选条件得到第一张表有,第二张表没有的数据
  • 然后利用union将两个的结果结合起来,就得到了最终结果
  • 最后将上述所有括起来形成一个临时表,然后再查询,对其进行整体的排序
select *
from
    (select  e.employee_id
    from Employees e 
    left join Salaries s on e.employee_id = s.employee_id
    where e.name is null or s.salary is null
    union 
    select s.employee_id
    from Employees e 
    right join Salaries s on e.employee_id = s.employee_id
    where e.name is null or s.salary is null
    ) as result
order by employee_id

结果:

在这里插入图片描述


总结:

能运行就行。


  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值