标题或者也可改成:表自己和自己left join.
背景:最近在拆库,但是发现有个表自己和自己left join,百撕不得骑姐啊。
本章主要讨论2个点:
1、表A和表B left join,最多多少行?
2、为啥表要自己和自己left join,可不可以只用表本身解决问题。
解决方案for1:
1、研究了下,有了新的发现:表A和表B left join时,假设表A有m行,表B有n行,那么A和B left join时,行数最多是多少?是m*n行,就是笛卡尔积本身的数量,举例如下:
这是原表记录,共9条,对它进行left join运算,SQL如下:
SELECT
*
FROM
borrows_contact mdc1
LEFT JOIN
borrows_contact mdc2 ON mdc1.user_id = mdc2.user_id
得出的结果是81条,如下图所示:
解决方案for2:
我们直接找一个可用的userId,然后分别不用left join和自己left join看2个结果,就可以得出结论:
1、不用left join,查出来的结果如下:
2、left join后的结果如下
通过比较发现,不用left join的话,只是把行列出来了,数据都是分散的,但是join的话,将行转列了,非常清晰明了,当然如果不用行转列,在程序中实现也可以
---------
最后要说明的是:如果表A有10行数据,表B有4行数据,那么A和B left join时,以A为主表,B中未匹配的6行数据将以null的形式出现,此时如果加上b.id is not null时,效果同A和B的inner join.