春招打卡d17n33-leetcode刷题183从不订购的客户

148 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

leetcode刷题183从不订购的客户

前文

本题目为leetcode数据库类型题目,题目序号为183,主要考察数据库查询知识,题目链接https://leetcode-cn.com/problems/customers-who-never-order/

题目信息

某网站包含两个表,Customers 表和 Orders 表。编写一个 SQL 查询,找出所有从不订购任何东西的客户。

Customers 表:

+----+-------+ | Id | Name | +----+-------+ | 1 | Joe | | 2 | Henry | | 3 | Sam | | 4 | Max | +----+-------+ Orders 表:

+----+------------+ | Id | CustomerId | +----+------------+ | 1 | 3 | | 2 | 1 | +----+------------+

解题思路

根据题目信息可知,已知当前有两张表,其中一张为客户表,另一张为订单表,通过订单表中包含客户id来进行关联。当前想要查询所有从没订阅过的客户,也就等同于查询所有出现在客户表中的用户,但他在订单表中没有关联。这是一道相对基础的问题,简单一看就可以想到很多种解法。首先本答案所采用的是左连接的解法。由于对于a left join b来说,会返回a表所有的数据,当b表不存在对应数据时则返回null,这与本题目的要求一致。因此只需要利用客户表连接订单表即可,再从结果表中查询不存在订单的数据即可。同样的,本题也可以采用where进行操作,直接在where中利用订单表进行操作。而主查询中只针对客户表即可,这种方式即可得到目标结果。另外要注意的是,判断空值应该采用isnull。

解题答案

select Name as Customers from (select a.Name,b.Id as Id from Customers a left join Orders b on a.Id = b.CustomerId) c where isnull(Id)

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。