zoukankan      html  css  js  c++  java
  • 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,匹配两条房屋数据,得到以上的最后结果。

  • 相关阅读:
    20170728xlVba SSC_TODAY
    卸载angular版本
    union 共用体
    bootstrap的粗认识
    结构体,结构体数组,结构体指针
    C语言的枚举
    nodeJS 的认识
    nodejs 平台搭建
    动态表单
    指针
  • 原文地址:https://www.cnblogs.com/longsanshi/p/11381404.html
Copyright © 2011-2022 走看看