为什么用主键分组是不够的?

时间:2014-10-15 15:48:16

标签: mysql group-by aggregate

假设我有这样的查询:

SELECT 
    items.item_id,
    items.name
    GROUP_CONCAT(graphics.graphic_id) AS graphic_ids
FROM order_items items
    LEFT JOIN order_graphics graphics ON graphics.item_id = items.item_id
WHERE // etc
GROUP BY items.item_id

据我了解,正确的做法是在GROUP_BY中包含每个未聚合的列,如下所示:

GROUP BY items.item_id, items.name

这是为了防止记录丢失,因为MySQL不知道如何对记录进行分组。但是,我并不热衷于编写包含数十个选定列的查询,并且必须将所有匹配的列保持为GROUP BY

我的问题是,为什么按主键items.item_id进行分组还不够?当然,从技术上讲,MySQL没有明确告知如何处理未分组的列,但我知道永远不会有比主键更多的记录,所以没有一个会丢失。

我是MySQL的新手并且在学习过程中,老实说,不是最干净的遗留代码,但我试图全面了解。那么有些案例我遗失在哪里可能会丢失记录,或者我是否误解了这种做法背后的原因?

(续前:MySQL 'group by' with 'left join' throws away some entries

0 个答案:

没有答案