我有一个名为forms
具有以下结构-
GROUP | FORM | FILEPATH
====================================
SomeGroup | SomeForm1 | SomePath1
SomeGroup | SomeForm2 | SomePath2
------------------------------------
我使用以下查询 -
SELECT * FROM forms GROUP BY 'GROUP'
它仅返回第一行 -
GROUP | FORM | FILEPATH
====================================
SomeGroup | SomeForm1 | SomePath1
------------------------------------
它不应该返回两者(或全部)吗?或者我(可能)错了?
As 手册 http://dev.mysql.com/doc/en/group-by-hidden-columns.html states:
在标准 SQL 中,包含以下内容的查询GROUP BY
子句不能引用选择列表中未在选择列表中命名的非聚合列GROUP BY
条款。例如,此查询在标准 SQL 中是非法的,因为name
选择列表中的列不会出现在GROUP BY
:
SELECT o.custid, c.name, MAX(o.payment)
FROM orders AS o, customers AS c
WHERE o.custid = c.custid
GROUP BY o.custid;
为了使查询合法,name
列必须从选择列表中省略或在GROUP BY
clause.
MySQL 扩展了使用GROUP BY
以便选择列表可以引用未在列表中命名的非聚合列GROUP BY
条款。这意味着前面的查询在MySQL中是合法的。您可以使用此功能避免不必要的列排序和分组,从而获得更好的性能。然而,这主要是当每个非聚合列中的所有值未在GROUP BY
每个组都相同。服务器可以自由地从每个组中选择任何值,因此除非它们相同,否则所选择的值是不确定的。
在您的情况下,MySQL 正确地执行了分组操作,但是(因为您选择了所有列,包括未对查询进行分组的列),但为您提供了每组中不确定的一条记录。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)