📅  最后修改于: 2023-12-03 14:57:56.593000             🧑  作者: Mango
在某些情况下,可能会遇到 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
错误提示。
要解决这个问题,可以通过以下两种方法之一:
可以通过修改 SQL 模式来禁用 ONLY_FULL_GROUP_BY
,这样就可以在查询中使用非聚合函数的字段,而不会产生错误提示。
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
执行该语句即可临时关闭 ONLY_FULL_GROUP_BY
选项,这样就可以正常使用包含非聚合函数的字段的查询了。
另一种解决方法是修改查询语句本身,将非聚合函数的字段也添加到 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 模式或修改查询语句本身。