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
}