gpt4 book ai didi

mysql - MySql 中连接 4 个表时出现重复数据

转载 作者:行者123 更新时间:2023-11-30 00:47:24 24 4
gpt4 key购买 nike

我有 4 个表格,相关列总结如下:

customers:
id
name

credits:
id
customer_id # ie customers.id
amount

sales:
id
customer_id # ie customers.id

sales_items:
id
sale_id # ie sales.id
price
discount

这个想法是 customers列出了我们所有的客户,credits列出他们每次向我们付款的时间,sales列出他们每次从我们这里购买东西的时间(但不包括他们购买的东西)和 sales_items列出他们在每次促销中购买的所有商品。所以你可以看到creditssales两者都与 customers 相关,但是sales_items仅与 sales 相关.

作为示例数据集,请考虑:

customers:
id | name
5 | Carter

credits:
id | customer_id | amount
1 | 5 | 100

sales:
id | customer_id
3 | 5

sales_items:
id | sale_id | price | discount
7 | 3 | 5 | 0
8 | 3 | 0 | 0
9 | 3 | 10 | 0

我在 MySQL 中尝试过:

SELECT c.*,
SUM( cr.amount ) AS paid,
SUM( i.price + i.discount ) AS bought
FROM customers AS c
LEFT JOIN sales AS s ON s.customer_id = c.id
LEFT JOIN sales_items AS i ON i.sale_id = s.id
LEFT JOIN credits AS cr ON cr.customer_id = c.id
WHERE c.id = 5

但它返回:

  id  |  name    |  paid  |  bought
5 | Carter | 300 | 15

如果我省略 SUM()函数,它返回:

  id  |  name    |  paid  |  bought
5 | Carter | 100 | 5
5 | Carter | 100 | 0
5 | Carter | 100 | 15

所以看起来它为 sales_items 中匹配的每条记录返回一行。 ,但它填写 amount credits 中具有相同值的列每一次。我看到这种情况正在发生,但我不明白为什么会发生。

那么,有两个问题:1. 将某个值涂抹到所有行中会发生什么情况?2.我可以向 MySQL 抛出什么 SQL 以便我可以得到它:

id  |  name    |  paid  |  bought
5 | Carter | 100 | 15

我知道我可以在子查询中将其全部分解,但是有没有办法仅通过连接来完成它?在解决这个问题时,我希望能学到一两点关于连接的知识。谢谢。

编辑:我为此创建了一个 SQL Fiddle:http://sqlfiddle.com/#!2/0051b/1/0

最佳答案

select distinct (c.id, c.name), sum(i.price+i.discount) AS bought, cr.amount AS paid
from customer c, credits cr, sales s, sales_items i
where s.customer_id = c.id
and i.sale_id = s.id
and cr.customer_id = c.id and c.id = 5
group by c.id, c.name;

我不太确定,但试试这个。使用分组依据;这肯定是解决办法。

关于mysql - MySql 中连接 4 个表时出现重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21250007/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com