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,匹配两条房屋数据,得到以上的最后结果。