select * from 主表 left join 副表 on ... where ...
这里 on 后面的条件 要担任两个作用,如果处理不好 就会出现搜索记录不是设想的那样:
1.第一个作用就是 关联主表和副表,on 后面写的是关联条件,不是关联结果的筛选条件,这个众所周知。
2.第二个作用尤为关键,在这里可以用来筛选副表不满足条件的记录,然后再根据与主表的关联条件进行关联。
而where则是对所有关联的结果进行过滤。
像 主表记录 : 副表记录 =1:n 的场景,如果想要保证最终主表结果的唯一性,那么就要在on后对副表的数据进行严格的限定,使之限制到 主表记录 : 副表记录 =1:1 。