此题确实简单,
- 解题思路:找到不属于RED公司的员工id,就可以找到对应的员工name。
但是一开始掌柜进入了一个思维的误区:
以为只要是com_id = 1 的公司就是’RED’公司。。。
于是提交了如下查询语句就华丽丽的出错了!
其实实际测试案例中会有 com_id = 2的公司才是RED公司情况。。。
所以这里的筛选条件应该是公司的名字即 name = ‘RED’ 才对!!!
(看了一下评论区也有好些跟掌柜一样进入误区的😂)
但是你看 order 表里面没有name这个字段,因此需要先跟company表格进行一个连接才能拿到这个筛选条件。
- 参考解法一👇内联 + 子查询。
转换成MySQL语言就是下面这段查询语句才是正确的!!!
结果击败了98%的用户,还不错。
- 参考解法二👉左联 + 分组筛选 + IF条件判断 + 聚合函数
掌柜这里时间并没变得更快,不过也许跟这题的数据量有关系。其中HAVING 后跟了一个SUM聚合函数和IF判断语句,用来👉找出不是’RED’公司的员工名字。
---------------------------------------一条延伸思考的分割线----------------------------------------
下面开始延伸一下,掌柜去看了击败100%用户的那位朋友代码,发现他用了一个USING函数跟JOIN 相连接!于是掌柜也好奇的运行了一下他的代码,结果在掌柜这里并不是最快的🤣
反而更慢了。。。搞不懂力扣这个运行系统。。。
不过刚刚顺手一查,反而查到了JOIN 后面搭配USING 和ON 的区别:
仔细看上面掌柜圈住的几句话,尤其是最底下那段话,👉虽然USING 和ON 类似,但两者并不是完全相等的。。。比如图上的查询语句,使用内联INNER JOIN 的时候,图上两者是相等的;但是如果使用外联比如LEFT JOIN ,两者就不一定相等了!!!因为其中一列会是NULL。。。
所以在使用JOIN连接两表/多表的时候要多注意!!!
参考资料:
MySQL 8.0官方文档