另一次在这里寻求帮助。
我快要疯了。
注意:当我使用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表(在SELECT
和LEFT OUTER JOIN
上),结果就可以了
什么是wrooooooong :(
感谢您的回答
卡罗
答案 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;