我应该关注GROUP BY子句中的重复条目吗?

时间:2013-11-29 16:50:40

标签: mysql group-by

我遇到了一些生成如下所示的查询的PHP代码(为了清楚起见,我省略了WHERE子句)

SELECT user.id FROM users 
JOIN table2 ON table2.user_id = users.id 
GROUP BY users.id, users.id

现在,它似乎有效,但我厌倦了GROUP BY中的重复项。我知道GROUP BY users.id, users.id没有意义,我可以在没有分组的情况下使用SELECT distinct(user.id)。 我想知道它是否会导致问题,或者它是否总是只是执行

SELECT user.id FROM users 
JOIN table2 ON table2.user_id = users.id 
GROUP BY users.id

1 个答案:

答案 0 :(得分:1)

这是您的查询(添加了初始“S”):

SELECT user.id
FROM users JOIN
     table2
     ON table2.user_id = user.id
GROUP BY user.id, user.id;

此查询在语法上不正确。您有一个名为users的表,它从未被引用,而一个别名user从未定义过。如果生成此代码,则错误比group by子句中的重复错误更大。

如果表格设置正确,则table2.user_id应始终为users表中的有效ID。如果是这样,那么以下是一个更简单的查询版本:

SELECT distinct t.user_id as id
FROM table2 t;

这与:和

之间的区别
SELECT t.user_id as id
FROM table2 t
GROUP BY t.user_id;

非常小(他们应该生成相同的执行计划)。但是,因为MySQL支持“隐藏列” - 即select子句中未聚合而不在group by子句中的列 - 在某些情况下distinctgroup by不一样。这不适用于其他数据库。并且,我认为这些情况是形成不良的SQL,但它们确实存在。这是一个例子:

SELECT distinct t.user_id as id, t.value
FROM table2 t;

不一定与:

相同
SELECT t.user_id as id, t.value
FROM table2 t
GROUP BY t.user_id;

虽然两者在语法上都是正确的MySQL语句。