MySQL连表查询去重

文章目录
[隐藏]

1.MySQL重复原因

SELECT SUM(amount) AS total_price t_orders LEFT JOIN t_orders_detail ON t_orders.order_id=t_orders_detail.order_id 
WHERE t_orders_detail.status = 1

左连接查询,计算total_price,发现累加的总金额超出很多。
原因是:LEFT JOIN 会从t_orders表中返回匹配t_orders_detail的数据(即使不匹配也会返回)。
1. 如果t_orders和t_orders_detail订单比例是 1:n (n <= 1) 则不会出现重复数据
2. 如果t_orders和t_orders_detail订单比例是 1: n (n >1) 则会出现重复数据

2.解决方案

2.1.GROUP BY

1. 先通过GROUP BY去重t_orders_detail表
2. 然后再连接去重后的表
实例:
SELECT SUM(amount) AS total_price t_orders LEFT JOIN (SELECT * FROM t_orders_detail GROUP BY order_id) AS b 
ON t_orders.order_id=b.order_id WHERE t_orders_detail.status = 1

3.总结

利用GROUP BY把重复的订单去重。t_orders和t_orders_detail 订单比例为1:1 。实现连表查询去重效果。
176 人浏览过

发表评论

邮箱地址不会被公开。 必填项已用*标注