背景
平常SQL功底较浅,公司也推崇我们能java处理的数据,尽可能用java处理。所以比较容易忽略一些基础的东西。
遇到的问题
left join 的时候数据在结果集,where 筛选之后 左边的数据也被筛掉。自己考虑可能是放在where后对整个查询结果集进行筛选的原因。
查资料
看了一些网上的资料,发现如果是把条件放在on后,mysql会建立一个临时表,在生成临时表的时候使用的条件,不管on的条件是否起到作用,都会返回左表 (table_name1) 的行。
但是如果放在where后的话,就是对整个临时表进行筛选了。
所以要根据自己的业务需求来看。
总结
如果是on后的条件筛选,则左边的表行都会在结果集
如果是where后的条件筛选,会对整个结果集进行筛选