sql_mode设置是STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION ,为什么还是报错could not extract ResultSet] with root cause com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'wemall_test.c.id'; this is incompatible with sql_mode=only_full_group_by
时间: 2023-07-22 15:11:17 浏览: 105
根据你提供的 sql_mode 设置:STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,错误消息表明你的查询中存在问题。
错误消息指出,在没有使用 GROUP BY 的聚合查询中,SELECT 列表中的表达式 #1 包含了非聚合的列 'wemall_test.c.id',而这与 sql_mode=only_full_group_by 不兼容。这意味着你的查询中包含了聚合函数(如 COUNT、SUM 等),但没有明确指定 GROUP BY 子句,并且 SELECT 列表中包含了非聚合的列。
要解决这个问题,你可以尝试以下几种方法:
1. 添加 GROUP BY 子句:根据你的查询需求,将 GROUP BY 子句添加到查询中,以明确指定按照哪些列进行分组。
2. 修改 SELECT 列表:如果你不需要在查询结果中显示非聚合的列,可以修改 SELECT 列表,只保留聚合函数和必要的列。
3. 修改 sql_mode 设置:如果你希望允许在没有 GROUP BY 的聚合查询中使用非聚合列,可以修改 sql_mode 设置。例如,移除 only_full_group_by 参数。但请注意,这可能会影响到其他查询的行为,所以需要谨慎考虑。
请根据你的具体需求选择适合的解决方案,并确保你的查询语句符合数据库的语法规则和约束条件。
相关问题
[mysqld] sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
这是一个MySQL配置文件中的sql_mode设置,它定义了MySQL对于数据插入和查询的严格性检查级别。具体来说,该设置包括以下几个参数:
1. STRICT_TRANS_TABLES:如果插入或更新操作违反了表定义的约束条件,则会导致警告或错误。
2. NO_ZERO_IN_DATE:禁止在日期中使用零值,例如 '0000-00-00'。
3. NO_ZERO_DATE:禁止日期列中的零值,默认情况下,MySQL允许使用 '0000-00-00' 表示无效日期。
4. ERROR_FOR_DIVISION_BY_ZERO:如果除数为零,则会引发错误。
5. NO_ENGINE_SUBSTITUTION:如果指定了一个不存在的存储引擎,MySQL将引发错误。
这些设置可以确保数据的完整性和一致性。当MySQL检测到违反这些设置的操作时,它会引发警告或错误,防止不合规的数据被插入或查询。
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
这是MySQL的一个参数,它控制MySQL在执行SQL语句时的严格程度。具体含义如下:
- STRICT_TRANS_TABLES:在进行数据类型转换以及插入数据时,如果数据类型不匹配或者插入的数据超出了字段的长度,抛出错误。
- NO_ZERO_IN_DATE:日期类型字段中不允许出现"0000-00-00"的值,否则抛出错误。
- NO_ZERO_DATE:日期类型字段中不允许出现"0000-00-00"的值,否则抛出错误。
- ERROR_FOR_DIVISION_BY_ZERO:如果除数为0,抛出错误。
- NO_AUTO_CREATE_USER:禁止MySQL自动创建新用户。
- NO_ENGINE_SUBSTITUTION:如果需要使用的存储引擎不存在,抛出错误。
这些参数可以在MySQL的配置文件中进行设置,也可以在执行SQL语句时通过SET语句进行设置。
阅读全文