sql关于联表查询不存在

我们先来比对一下这两句sql:

一、

SELECT * FROM 
(SELECT d.* ,g.goods_score AS gid FROM mall_goods g 
RIGHT JOIN  (select a.*, b.name _state FROM mall_goods_info a, code b where 1=1 and b.type = '商品状态' and a.store_id = '317' and a.del_flag = 1 and a.state =  b.code ) d 
ON g.id =d.id ) e 
WHERE ISNULL(e.gid)

二、

select a.*, b.name _state from  mall_goods_info  a
inner join code b 
on b.type = '商品状态' and a.state = b.code 
where a.store_id = '317' and a.del_flag = 1 and a.id not in (select mall_goods.id from mall_goods)

查询结果一样,主要的问题就是查询某张表的某个字段的值不存在于另一张表的结果集。

一 的方法是先righ join等于的,因为是右连接,所以不等于的mall_goods表就是null,最后where isnull

二的方法是直接not in,这个值不存在另一张表


查询时间对比(对比了几次):二的结果快于一的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值