Left Join理解
如下是Left Join等官方解释:
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
看到上面定义,一开始想到的是保留左表,右表是补充列,得到结果数量=左表数量。其实不然,应该是针对左表的每一行,循环匹配右表,如果on条件匹配到了,就添加到结果集中,相当于两重for循环。用编程方式应该如下:
select * from test1 t1 left join test2 t2 on t1.field1=t2.field2;
for (var i=0;i<左表.length;i++)
{
var leftRow=左表[i];
for(var j=0;j<右表.length;j++)
{
var rightRow=右表[j];
if(leftRow[field1]==rightRow[field2])//这里相当于on条件
{
var resultRow=Union(leftRow,rightRow);//融合后结果集
arr.push(resultRow);//arr:最终返回集合
}
}
}
这样就很好理解以下这句话:
总结:如果SQL用的是Left Join ,On后面的条件对Left的表没有作用,只对Right的表有过滤作用,Where语句可以对Left的表有过滤作用
如果SQL用的是Right Join ,On后面的条件对Right的表没有作用,只对Left的表有过滤作用,Where语句可以对Right的表有过滤作用
如果SQL用的是Right Join ,On后面的条件对Right的表没有作用,只对Left的表有过滤作用,Where语句可以对Right的表有过滤作用