SQL实现LeetCode(183.从未下单订购的顾客)

 更新时间:2021年08月04日 14:51:27   作者:Grandyang  
这篇文章主要介绍了SQL实现LeetCode(182.从未下单订购的顾客),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

[LeetCode] 183.Customers Who Never Order 从未下单订购的顾客

Suppose that a website contains two tables, the Customers table and the Orders table. Write a SQL query to find all customers who never order anything.

Table: Customers.

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

Table: Orders.

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

Using the above tables as example, return the following:

+-----------+
| Customers |
+-----------+
| Henry     |
| Max       |
+-----------+

这道题让我们给了我们一个Customers表和一个Orders表,让我们找到从来没有下单的顾客,那么我们最直接的方法就是找没有在Orders表中出现的顾客Id就行了,用Not in关键字,如下所示:

解法一:

SELECT Name AS Customers FROM Customers 
WHERE Id NOT IN (SELECT CustomerId FROM Orders);

或者我们也可以用左交来联合两个表,只要找出右边的CustomerId为Null的顾客就是木有下单的:

解法二:

SELECT Name AS Customers FROM Customers
LEFT JOIN Orders ON Customers.Id = Orders.CustomerId
WHERE Orders.CustomerId IS NULL;

我们还可以用Not exists关键字来做,原理和Not in很像,参见代码如下:

解法三:

SELECT Name AS Customers FROM Customers c
WHERE NOT EXISTS (SELECT * FROM Orders o WHERE o.CustomerId = c.Id);

参考资料:

https://leetcode.com/discuss/22624/three-accepted-solutions

https://leetcode.com/discuss/53213/a-solution-using-not-in-and-another-one-using-left-join

到此这篇关于SQL实现LeetCode(182.从未下单订购的顾客)的文章就介绍到这了,更多相关SQL实现从未下单订购的顾客内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL复制表常用的四种方式小结

    MySQL复制表常用的四种方式小结

    mysql 想必大家比较熟悉了,我们常见的crud  sql想必大家也是手到拈来,但可能会有人不会写mysql中复制表,所以接下来本文我会介绍四种常用的复制表的方式,需要的朋友可以参考下
    2023-07-07
  • SQL语句中OR和AND的混合使用的小技巧

    SQL语句中OR和AND的混合使用的小技巧

    在SQL语句中我们可能会经常混合使用到OR和AND,其中可能会出现一些小问题,下面小编来讲一讲它的使用技巧
    2019-05-05
  • MySQL慢查询中的commit慢和binlog中慢事务的区别

    MySQL慢查询中的commit慢和binlog中慢事务的区别

    这篇文章主要介绍了MySQL慢查询中的commit慢和binlog中慢事务的差异,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Mysql NULL导致的神坑

    Mysql NULL导致的神坑

    这篇文章主要介绍了Mysql NULL导致的神坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Advanced SQL Injection with MySQL

    Advanced SQL Injection with MySQL

    Advanced SQL Injection with MySQL...
    2006-12-12
  • MySQL字符集的基本类型与统一字符集分析

    MySQL字符集的基本类型与统一字符集分析

    此文章主要向大家描述的是MySQL字符集的基本类型,以及统一字符集的实际操作方法,下面就是文章的主要内容描述。
    2011-09-09
  • IDEA连接mysql又报错!Server returns invalid timezone. Go to tab and set serverTimezone  prope的问题

    IDEA连接mysql又报错!Server returns invalid timezone. Go to tab an

    这篇文章主要介绍了IDEA连接mysql又报错!Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' prope问题,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友可以参考下
    2020-05-05
  • CentOS6.9+Mysql5.7.18源码安装详细教程

    CentOS6.9+Mysql5.7.18源码安装详细教程

    CentOS6.9+Mysql5.7.18源码安装,以下操作均在root用户下执行。下面通过本教程给大家详细介绍CentOS6.9+Mysql5.7.18源码安装方法,需要的的朋友参考下吧
    2017-06-06
  • Mysql中distinct与group by的去重方面的区别

    Mysql中distinct与group by的去重方面的区别

    distinct简单来说就是用来去重的,而group by的设计目的则是用来聚合统计的,两者在能够实现的功能上有些相同之处,但应该仔细区分,因为用错场景的话,效率相差可以倍计。
    2020-03-03
  • 揭开SQL中NULL的神秘面纱

    揭开SQL中NULL的神秘面纱

    表的字段默认允许存放NULL值,这意味着,您在插入记录或者更新记录时,可以不为该字段指定值,此时该字段将存储NULL值,这篇文章将揭开SQL中NULL的神秘面纱。这个问题可能困扰着很多初级开发者
    2023-01-01

最新评论