zoukankan      html  css  js  c++  java
  • 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 |
    +----+------------+
    例如给定上述表格,你的查询应返回:

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/customers-who-never-order
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解答

    通过 not exists 实现。

    ---- oracle ----
    /* Write your PL/SQL query statement below */
    select a.Name as Customers
    from Customers a
    where not exists(select 1 from Orders b where a.Id = b.CustomerId) ---- 909ms
    

    通过 left join 实现。

    ---- oracle ----
    /* Write your PL/SQL query statement below */
    select a.Name as Customers
    from Customers a
    left join Orders b
    on a.Id = b.CustomerId
    where b.Id is null ---- 1246ms
    

    通过子查询和 not in 实现。

    ---- oracle ----
    /* Write your PL/SQL query statement below */
    select a.Name as Customers
    from Customers a
    where Id not in (select CustomerId from Orders) ---- 1172ms
    

    思考

    1. 通过 not exists 实现,效率最高;
    2. 通过 left join 关联之后为空实现;
  • 相关阅读:
    20140830 函数 递归
    函数 20140829
    结构体20140827
    20140826 集合
    20140822数组,应用举例
    140821 字符串,数字,日期及应用举例
    20140819 例子
    HTML基础
    登陆远程服务器
    索引 视图 游标
  • 原文地址:https://www.cnblogs.com/hider/p/11724389.html
Copyright © 2011-2022 走看看