Leetcode题解之database(十二)607. Sales Person

此题确实简单,

  • 解题思路:找到不属于RED公司的员工id,就可以找到对应的员工name。
    但是一开始掌柜进入了一个思维的误区:
    以为只要是com_id = 1 的公司就是’RED’公司。。。
    在这里插入图片描述

于是提交了如下查询语句就华丽丽的出错了!
小细节.png
其实实际测试案例中会有 com_id = 2的公司才是RED公司情况。。。
red.png
所以这里的筛选条件应该是公司的名字即 name = ‘RED’ 才对!!!
(看了一下评论区也有好些跟掌柜一样进入误区的😂)

但是你看 order 表里面没有name这个字段,因此需要先跟company表格进行一个连接才能拿到这个筛选条件

  • 参考解法一👇内联 + 子查询。
    转换成MySQL语言就是下面这段查询语句才是正确的!!!
    right.png

结果击败了98%的用户,还不错。

  • 参考解法二👉左联 + 分组筛选 + IF条件判断 + 聚合函数
    在这里插入图片描述
    掌柜这里时间并没变得更快,不过也许跟这题的数据量有关系。其中HAVING 后跟了一个SUM聚合函数和IF判断语句,用来👉找出不是’RED’公司的员工名字。

---------------------------------------一条延伸思考的分割线----------------------------------------
下面开始延伸一下,掌柜去看了击败100%用户的那位朋友代码,发现他用了一个USING函数跟JOIN 相连接!于是掌柜也好奇的运行了一下他的代码,结果在掌柜这里并不是最快的🤣
using.png

反而更慢了。。。搞不懂力扣这个运行系统。。。
不过刚刚顺手一查,反而查到了JOIN 后面搭配USING 和ON 的区别:
官方文档解释.png

仔细看上面掌柜圈住的几句话,尤其是最底下那段话,👉虽然USING 和ON 类似,但两者并不是完全相等的。。。比如图上的查询语句,使用内联INNER JOIN 的时候,图上两者是相等的;但是如果使用外联比如LEFT JOIN ,两者就不一定相等了!!!因为其中一列会是NULL。。。

所以在使用JOIN连接两表/多表的时候要多注意!!!

参考资料:
MySQL 8.0官方文档

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值