前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL Server 每日一题--解析只逛不买

SQL Server 每日一题--解析只逛不买

作者头像
喵叔
发布2020-09-08 16:36:44
2590
发布2020-09-08 16:36:44
举报
文章被收录于专栏:喵叔's 专栏喵叔's 专栏

这个题目经常用到的解决方法有两种,第一种方法是大多数人首先想到的利用 not in 或者 not exists,第二种方法是利用 left join 。下面我们来分别看看这两种方法。

零、解析

1.not in / not exists

  • not in 首先我们查询订单表中 CustomersId ,并去重。这些 Id 都是有购买记录的会员的Id。
代码语言:javascript
复制
select distinct CustomerId from orders

然后将查询出来的 CustomerId 作为过滤条件,查询 Customers 表并过滤掉查询出来的 CustomerId,这样就查询出没有买过一件东西的会员了。

代码语言:javascript
复制
select Name from Customers where Id not in (select CustomerId from orders)
  • not exists 与 not in 同理
代码语言:javascript
复制
SELECT c.Name
FROM Customers AS c
WHERE NOT EXISTS
(
    SELECT CustomerId FROM Orders WHERE c.Id = CustomerId
);

2.left join 利用 left join 去除 null 值的功能也可以的,这种方法相比上面的方法要相对简单快捷。

代码语言:javascript
复制
SELECT c.Name
FROM Customers AS c
    LEFT JOIN Orders AS o
        ON c.Id = o.CustomerId
WHERE o.Id IS NULL;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 零、解析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档