标题或者也可改为:表本身和本身left join.sql
背景:最近在拆库,可是发现有个表本身和本身left join,百撕不得骑姐啊。code
本章主要讨论2个点:class
一、表A和表B left join,最多多少行?程序
二、为啥表要本身和本身left join,可不能够只用表自己解决问题。im
解决方案for1:数据
一、研究了下,有了新的发现:表A和表B left join时,假设表A有m行,表B有n行,那么A和B left join时,行数最可能是多少?是m*n行,就是笛卡尔积自己的数量,举例以下:img
这是原表记录,共9条,对它进行left join运算,SQL以下:解决方案
SELECT * FROM borrows_contact mdc1 LEFT JOIN borrows_contact mdc2 ON mdc1.user_id = mdc2.user_id
得出的结果是81条,以下图所示:co
解决方案for2:join
咱们直接找一个可用的userId,而后分别不用left join和本身left join看2个结果,就能够得出结论:
一、不用left join,查出来的结果以下:
二、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.