表结构
活动表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;