【发布时间】:2015-09-25 10:48:20
【问题描述】:
我有一张订单表和一张用户表。可以通过用户表中的条目下订单。
使用以下 MySQL 语句,如果有匹配的用户,我会得到重复的订单值:
SELECT o.id, u.id as 'user_id', u.name
FROM orders o
LEFT JOIN users u ON o.user_id = u.id
WHERE o.status = 'active'
如果我添加GROUP BY o.id,它可以解决问题。
SELECT o.id, u.id as 'user_id'
FROM orders o
LEFT JOIN users u ON o.user_id = u.id
WHERE o.status = 'active'
GROUP BY o.id
如果我使用SELECT DISTINCT,它也可以工作。
我的问题是:
- 为什么会返回重复的字段?
- 使用 GROUP BY 或 SELECT DISTINCT 更正确吗?
【问题讨论】:
-
GROUP BY 是正确的
-
使用 group by 获得准确的结果
-
为什么
select distinct会出错或不准确?(回应 Rahautos 和 Ushma Shah) -
SELECT DISTINCT更快。但真正的问题出在其他地方:order表中有重复的条目。order.id应该是表的PK,或者至少是UNIQUE INDEX。或者表orders的行包含有关订单及其包含的项目的信息。如果是这种情况,您应该将其拆分为两个表:一个包含有关订单的信息(id、日期、用户等),另一个包含每个订单的产品(order.id为FK)。 -
order.id是主键。