MySQL:使用不同数量的相同ID加入更多表

时间:2013-06-10 16:46:03

标签: mysql join

另一次在这里寻求帮助。

我快要疯了。

注意:当我使用ID术语时,我指的是无自动增量ID。每个ID都标识一个客户

我有4张不同的桌子。

1°表whith唯一ID(12.000记录)。此表用于名字,姓氏,出生日期,地址,邮件等

2°表与第一个的唯一ID相同(12.000记录/相同值)。该表用于其他类型的数据,如反馈

3°具有唯一ID但浪费为12.000的表仅为10,但它们具有相同的1°和2°表值。此表用于将ID分配给管理其ID的用户

4°表没有唯一ID。约6.000条记录。在此表中,我具有相同的ID值,但相同ID的数量从1到5.此表用于购买Customers。所以,我有更多相同ID的记录,但购买数据,日期/时间等不同。

表1.(相同ID的相同数量) CustomersMaster

ID        |Name     |Surname   |mail          |
----------|---------|----------|--------------|
40302025  |Jack     |  Daniel  |  m1@site.com |
40302028  |Martin   |  Scorzese|  m2@site.com |
40302030  |Donald   |  Duck    |  m3@site.com |
40302055  |Eric     |  Clapton |  m4@site.com |
40302074  |Mark     |  Knopfler|  m5@site.com |

表2.反馈(相同的唯一ID数量,如表1)

ID        |Feedback |
----------|---------|
40302025  |  10     |
40302028  |  8      |
40302030  |  7      |
40302055  |  9      |
40302074  |  10     |

表3. CustomersToUsers(不同的唯一ID数)

ID        |managed_by|
----------|----------|
40302025  |User001   |
40302028  |User002   |
40302055  |User004   |
40302074  |User004   |

表4.购买。 (不同数量的相同ID,有时ID不存在,如例子)

例如,在此表中,ID 40302074不存在,因为客户尚未购买任何产品。

ID        |ProductCode|
----------|-----------|
40302025  |505        |
40302025  |510        |
40302025  |300        |
40302025  |305        |
40302028  |505        |
40302028  |545        |
40302028  |515        |
40302028  |212        |
40302028  |121        |
40302030  |510        |
40302030  |510        |
40302030  |510        |
40302030  |510        |
40302055  |300        |
40302055  |300        |
40302055  |300        |

现在。我尝试使用LEFT OUTER JOIN.


SELECT A.NAME, A.SURNAME, A.MAIL, B.FEEDBACK, C.MANAGED_BY, D.PRODUCTCODE 
FROM 


    CUSTOMERSMASTER AS A 

    LEFT OUTER JOIN

    FEEDBACKS AS B ON A.ID = B.ID

    LEFT OUTER JOIN

    CustomersToUsers AS C ON B.ID = C.ID

    LEFT OUTER JOIN

    Purchases AS D ON C.ID = D.ID

结果是行数较少,但如果我从查询中删除Purchase表(在SELECTLEFT OUTER JOIN上),结果就可以了

什么是wrooooooong :(

感谢您的回答

卡罗

3 个答案:

答案 0 :(得分:0)

在上次加入条件中使用A.ID = D.ID代替C.ID = D.ID

因为A中的许多记录都没有C中的相关记录,所以C.id将为空且......

答案 1 :(得分:0)

因为您的购买表中有超过1行,对于上述查询,您将获得比 CustomersMaster 表更多的行,

检查此链接: - sqlfiddle example,也许这会对您有所帮助

答案 2 :(得分:-1)

我更喜欢这种方式,但这一切都归结为你通常使用的方式。对我而言,它更加清晰和富有表现力。这适用于案件。

SELECT A.NAME, A.SURNAME, A.MAIL, B.FEEDBACK, C.MANAGED_BY, D.PRODUCTCODE 
FROM 


    CUSTOMERSMASTER A, FEEDBACKS B, CustomersToUsers C, Purchases D

  where 
    A.id=B.id && B.id=C.id && C.id= D.id;