GROUP BY 中选择了哪一行?

Fin*_*sse 7 mysql sql

假设我有一张桌子

+------+---------+--------+
| lang | title   | url    |
+------+---------+--------+
| pt   | Livro 1 | o294jl |
| en   | Book 1  | o294jl |
| en   | Book 2  | o294jl |
+------+---------+--------+
Run Code Online (Sandbox Code Playgroud)

我运行一个查询

+------+---------+--------+
| lang | title   | url    |
+------+---------+--------+
| pt   | Livro 1 | o294jl |
| en   | Book 1  | o294jl |
| en   | Book 2  | o294jl |
+------+---------+--------+
Run Code Online (Sandbox Code Playgroud)

由于组内 和 的值不同,lang查询结果并不明显。title

SQL 引擎如何选择从组中返回哪一行?在我的示例中必须选择哪一行?SQL标准中有规定吗?

Gor*_*off 6

从每个组的任意匹配行中选择值。对于不同的运行,这些值可能来自不同的行。理论上,同一列中的不同列SELECT可能来自不同的行。

该文档对此进行了解释:

如果ONLY_FULL_GROUP_BY禁用,则标准 SQL 使用的 MySQL 扩展GROUP BY允许选择列表、HAVING条件或 ORDER BY 列表引用非聚合列,即使这些列在功能上不依赖于GROUP BY列。。。。在这种情况下,服务器可以自由地从每个组中选择任何值,因此除非它们相同,否则选择的值是不确定的,这可能不是您想要的。

您应该阅读有关该主题的完整文档。

请注意,MySQL 现在的默认行为是拒绝此类查询。耶!