StarkerSong Get Busy Living

leetcode数据库总结(8)-Customers Who Never Order

2016-09-26

183. Customers Who Never Order

表结构

表:table

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

表:Orders

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

问题描述

根据上述的两张表查找出从未下单的用户。例如上述表中返回的结果为:

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

解决方案

子查询方案:

这题首先想到的是子查询操作,查找不在列表中的数据。

select Customers.Name Customers 
from Customers  
where Customers.Id 
not in
(select CustomerId from Orders)

但是子查询比较耗费时间,这个语句执行时间为:522 ms

左连接操作:

通常可以将子查询转为非子查询操作,在下面的语句中通过left操作获得查询结果。

select c.Name Customers 
from Customers c
left join Orders o
on  c.Id=o.CustomerId  
where o.CustomerId is null

这个语句执行时间为:475 ms

总结

考察子查询操作的知识,提升查询性能。


Similar Posts

Comments