left join 多表關聯原理


這個是我再別人那里拿的數據,還有他的問題

現在有 A,B,C,D四張表,A為主表,B、C、D都是子表,與A屬於一對多關系。查詢后出現大量重復數據

表A
-----------------------------------------------
cID                      Name
1                          張三
2                          李四

表B
-----------------------------------------------
cID                      Car
1                          本田飛度
1                          POLO

表C
-----------------------------------------------
cID                      Credit
1                          廣發信用卡
1                          興業信用卡
1                          民生信用卡

表D
-----------------------------------------------
cID                      Hose
1                          怡海花園14號樓201
1                          富錦家園7號樓702

查詢語句

SELECT * FROM A LEFT JOIN B ON (A.cID = B.cID)  LEFT JOIN C ON (A.cID = C.cID)  LEFT JOIN D ON (A.cID = D.cID)

查詢結果為

cID                  Name                   Car                      Credit                      Hose
1                      張三                      本田飛度             廣發信用卡             怡海花園14號樓201
1                      張三                      本田飛度             廣發信用卡             富錦家園7號樓702
1                      張三                      本田飛度             興業信用卡             怡海花園14號樓201
1                      張三                      本田飛度             興業信用卡             富錦家園7號樓702
1                      張三                      本田飛度             民生信用卡             怡海花園14號樓201
1                      張三                      本田飛度             民生信用卡             富錦家園7號樓702
1                      張三                       POLO                 廣發信用卡             怡海花園14號樓201
1                      張三                       POLO                 廣發信用卡             富錦家園7號樓702
1                      張三                       POLO                 興業信用卡             怡海花園14號樓201
1                      張三                       POLO                 興業信用卡             富錦家園7號樓702
1                      張三                       POLO                 民生信用卡             怡海花園14號樓201
1                      張三                       POLO                 民生信用卡             富錦家園7號樓702

我最終想實現的效果為:
cID                  Name                   Car                      Credit                      Hose
1                      張三                      本田飛度             廣發信用卡             怡海花園14號樓201
                                                      POLO                  興業信用卡             富錦家園7號樓702
                                                                                   民生信用卡       

我來推一下為什么會得到上面的數據

首先、AB表關聯,得到一下數據:

cID        Name        Car     
1           張三           本田
1           張三           polo

然后,關聯C表,mysql會將AB結果集做為一個整體,關聯C,因為(A.cID = C.cID),從數據來看肯定滿足,AB數據集的第一條,匹配了C表的3條數據,第二條也匹配了三條數據,然后就是

cID                  Name                   Car                      Credit
1                      張三                      本田                    廣發信用卡
1                      張三                      本田                    興業信用卡
1                      張三                      本田                    民生信用卡
1                      張三                      POLO                    廣發信用卡
1                      張三                      POLO                    興業信用卡
1                      張三                      POLO                    民生信用卡

再然后,ABC結果集關聯D,分別是ABC結果的1,2,3,4,5,6,匹配兩條房屋數據,得到以上的最后結果。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM