今天在使用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则是在生成临时表完成之后才进行的筛选,条件不为真则全部过滤掉。