SELECT a.comm_id, c.Title house_keeper_name, ( SELECT build.id FROM erp_base.tb_base_masterdata_resource AS resource INNER JOIN erp_base.tb_base_masterdata_resource AS unit ON unit.id = resource.parent_id INNER JOIN erp_base.tb_base_masterdata_resource AS build ON build.id = unit.parent_id WHERE resource.id = a.resource_id ) resource_group FROM tb_charge_receipts_detail a LEFT JOIN erp_base.tb_base_masterdata_resource b ON b.id = a.resource_id LEFT JOIN erp_base.rf_dictionary c ON b.house_keeper = c.id GROUP BY a.comm_id,c.Title,resource_group 这个sql在mysql中报this is incompatible with sql_mode=only_full_group_by是为什么该怎么改
时间: 2024-03-16 09:42:55 浏览: 97
uart_comm.zip_3668.comm_comm_mfc uart
该错误是因为 MySQL 的版本更新,默认启用了 `ONLY_FULL_GROUP_BY` 模式,这种模式下,`GROUP BY` 必须包含所有非聚合字段。
在这个 SQL 语句中,`SELECT` 子句中的字段 `resource_group` 不在 `GROUP BY` 中,因此 MySQL 报错。
解决这个问题的方法有两个:
1. 关闭 `ONLY_FULL_GROUP_BY` 模式
可以通过修改 MySQL 的配置文件 `my.cnf` 或者在命令行中输入如下语句来关闭该模式:
```
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
```
这种方法会影响到整个 MySQL 实例的行为,需要谨慎使用。
2. 将 `SELECT` 子句中的所有字段都放入 `GROUP BY` 中
可以将 SQL 语句修改为:
```
SELECT a.comm_id, c.Title as house_keeper_name, (
SELECT build.id
FROM erp_base.tb_base_masterdata_resource AS resource
INNER JOIN erp_base.tb_base_masterdata_resource AS unit ON unit.id = resource.parent_id
INNER JOIN erp_base.tb_base_masterdata_resource AS build ON build.id = unit.parent_id
WHERE resource.id = a.resource_id
) as resource_group
FROM tb_charge_receipts_detail a
LEFT JOIN erp_base.tb_base_masterdata_resource b ON b.id = a.resource_id
LEFT JOIN erp_base.rf_dictionary c ON b.house_keeper = c.id
GROUP BY a.comm_id, c.Title, resource_group;
```
这种方法会使 SQL 语句更加冗长,但不会影响 MySQL 的全局设置。
阅读全文