SQL利用连接查询实现not in功能

表结构

活动表activity

活动商品表sku_activity

两张表通过活动id(activity_id)关联,sku_activity表中sku商品参加activity表中的活动

需求

查询活动id、活动名称信息,筛选条件:排除参加活动的商品类型为A的

最终效果

实现

使用not in实现

先在sku_activity表中查出sku_type为A的activity_id,然后在查询activity表的时候排除sku_activity表中查出的activity_id

select id,activity_name
from activity
where id not in(select activity_id from sku_activity where sku_type = 'A');

使用left join实现(推荐)

利用左连接查询的特性:left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种。 左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。

left join sku_activity b on a.id = b.activity_id and b.sku_type = 'A'会使sku_activity表中除了sku_type = 'A'以外的sku_type全部为null,然后通过where b.sku_type is null达到排除sku_type = 'A'的效果
select a.id,a.activity_name
from activity a
left join sku_activity b on a.id = b.activity_id and b.sku_type = 'A'
where b.sku_type is null;

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值