go 使用 mysql goup by报错

sql

var sql = "select max(version) as version, id, " +
		" tenant,type, name, format, default_value, multi_line, max_length, min_length, formula " +
		" from imcs_field_string_definitions " +
		" where id = 11 group by id"

报错

Error 1055: Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘imcs.imcs_field_string_definitions.tenant’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

原因:

每次重启main的时候会重新初始化数据库设置,
每次重启main后需要初始化,执行:

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

优化后的代码

// leimin, 批量查询最大版本的定义数据
func MaxVersionDefinition(db *gorm.DB, ids []string, tenant string) (maxModels []FieldStringDefinition, err error) {
	db.Exec("SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))")
	var sql = " select max(version) as version, id, " +
		" tenant,type, name, format, default_value, multi_line, max_length, min_length, formula " +
		" from imcs_field_string_definitions " +
		" where 1=1 ${ids} and tenant= ${tenant} " +
		" group by id "
	idsStr, err := concatString(ids)
	sql = strings.Replace(sql, "${ids}", idsStr, -1)
	sql = strings.Replace(sql, "${tenant}", tenant, -1)

	db = db.Raw(sql)
	db = db.Scan(&maxModels)
	return maxModels, db.Error
}
发布了97 篇原创文章 · 获赞 21 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/leinminna/article/details/104959670