行轉列經典案例(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.

相關文章
相關標籤/搜索