📌  相关文章
📜  这与 sql_mode=only_full_group_by 不兼容 - SQL (1)

📅  最后修改于: 2023-12-03 14:57:56.593000             🧑  作者: Mango

这与 sql_mode=only_full_group_by 不兼容 - SQL

在某些情况下,可能会遇到 SQL 语句中出现 this is incompatible with sql_mode=only_full_group_by 的错误提示,这种错误提示通常是因为查询中使用了 GROUP BY 语句,但是在 SELECT 字段列表中却使用了非聚合函数的字段,这种情况在 MySQL 5.7.5 版本之后的默认 SQL 模式 ONLY_FULL_GROUP_BY 下会被视为错误。

例子:

SELECT name, COUNT(*) FROM student GROUP BY gender;

在该查询中,name 字段并没有使用聚合函数,而在 gender 字段上使用了 GROUP BY 语句。在 MySQL 5.7.5 版本之后的默认 SQL 模式下,该查询将会产生 this is incompatible with sql_mode=only_full_group_by 错误提示。

要解决这个问题,可以通过以下两种方法之一:

1. 修改 SQL 模式

可以通过修改 SQL 模式来禁用 ONLY_FULL_GROUP_BY,这样就可以在查询中使用非聚合函数的字段,而不会产生错误提示。

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

执行该语句即可临时关闭 ONLY_FULL_GROUP_BY 选项,这样就可以正常使用包含非聚合函数的字段的查询了。

2. 修改查询语句

另一种解决方法是修改查询语句本身,将非聚合函数的字段也添加到 GROUP BY 语句中去。

示例:

SELECT name, COUNT(*) FROM student GROUP BY gender, name;

在该查询中,name 字段也被添加到了 GROUP BY 语句中,这样就不会产生错误提示了。

总之,出现 this is incompatible with sql_mode=only_full_group_by 错误提示通常是由于查询语句中使用了 GROUP BY 语句,并且在 SELECT 字段列表中包含了非聚合函数的字段。解决方法可以是修改 SQL 模式或修改查询语句本身。