這個是我再別人那里拿的數據,還有他的問題
現在有 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,匹配兩條房屋數據,得到以上的最后結果。