left join中on 和where 的差别

今天在使用left join 时,用on进行过滤来筛选

SELECT t.`measure_id`, t.link_name,GROUP_CONCAT(t.range_time)

SELECT t.`measure_id`, t.link_name,GROUP_CONCAT(t.range_time) range_time,GROUP_CONCAT(a.`alarm_score`) alarm_score,GROUP_CONCAT(a.`full_threshold`) full_threshold
    FROM tb_assessment_criteria a
    LEFT JOIN tb_threshold t ON a.plan_id = t.id and t.range_time is not null

 关于group_concat 可以去看我上一篇

ps:这里建议不要使用 is not null,进行null判断会导致数据库引擎放弃索引进行全局扫描,这就牵扯到一些sql优化问题了。以后有空会在出一个关于sql优化的文章

在这里进行判空时,and后的条件没有起作用。查了资料才明白。我们都知道当两张表或两张以上进行联查时,会生成一个临时表 ,问题就出在这里,

on是在生成临时表时进行的筛选!也就是无论on中的条件是否为真,最终都会返回左表中的记录。

where则是在生成临时表完成之后才进行的筛选,条件不为真则全部过滤掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值