行转列经典案例(left join)

标题或者也可改为:表本身和本身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.

相关文章
相关标签/搜索