> mysql 5.7's only_full_group_by
模式:故障排除和解决方案
升级到MySQL 5.7通常会引入only_full_group_by
语句包含未包含在SELECT
>子句中的非聚集列时,就会发生这种情况。 与其禁用这种关键特征(强烈灰心),让我们探索有效的解决方案:GROUP BY
问题: 在较旧的MySQL版本中正确运行的查询可能会在5.7中失败,在
列表中产生一个错误指示非聚集列的错误在功能上并不取决于>列。
SELECT
GROUP BY
推荐的解决方案:
>列表中的任何非聚集列添加到>子句中。 这样可以确保每个组唯一地定义这些列的值。 例如:GROUP BY
SELECT
GROUP BY
<code class="language-sql">GROUP BY group_name, group_id</code>
>,,,MIN()
,MAX()
,AVG()
,)。这样可以确保每组单个结果。 示例:SUM()
COUNT()
<code class="language-sql">SELECT group_id AS 'value', group_name AS 'text', COUNT(*) AS 'count' FROM mod_users_groups LEFT JOIN mod_users_data ON group_id = mod_users_data.group_id WHERE ... GROUP BY group_name, group_id</code>
始终符合其表格或别名的列表,尤其是在涉及加入的查询中。这阐明了每列属于哪个表并防止歧义。
通过实施这些策略,您可以在遵守MySQL 5.7改进的SQL标准合规性的同时解决数据完整性并保持数据完整性。 避免禁用<code class="language-sql">SELECT g.group_id AS 'value', g.group_name AS 'text' FROM mod_users_groups g LEFT JOIN mod_users_data d ON g.group_id = d.group_id WHERE ... GROUP BY g.group_name, g.group_id HAVING COUNT(d.user_id) > 0 ORDER BY g.group_name</code>
以上是如何解决 MySQL 的'only_full_group_by”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!