diff --git a/pkg/compute/models/dbinstance_skus.go b/pkg/compute/models/dbinstance_skus.go index 4b6ccdc868..394836a695 100644 --- a/pkg/compute/models/dbinstance_skus.go +++ b/pkg/compute/models/dbinstance_skus.go @@ -165,15 +165,20 @@ func (manager *SDBInstanceSkuManager) ListItemFilter( q = q.In("engine_version", query.EngineVersion) } - zones := ZoneManager.Query().SubQuery() - for k, v := range map[string][]string{"zone1": query.Zone1, "zone2": query.Zone2, "zone3": query.Zone3} { - if len(v) > 0 { - q = q.Join(zones, sqlchemy.Equals(zones.Field("id"), q.Field(k))).Filter( - sqlchemy.OR( - sqlchemy.In(zones.Field("name"), v), - sqlchemy.In(zones.Field("id"), v), - ), - ) + for k, zoneIds := range map[string][]string{"zone1": query.Zone1, "zone2": query.Zone2, "zone3": query.Zone3} { + ids := []string{} + for _, zoneId := range zoneIds { + zone, err := ZoneManager.FetchByIdOrName(userCred, zoneId) + if err != nil { + if errors.Cause(err) == sql.ErrNoRows { + return nil, httperrors.NewResourceNotFoundError2("zone", zoneId) + } + return nil, httperrors.NewGeneralError(err) + } + ids = append(ids, zone.GetId()) + } + if len(ids) > 0 { + q = q.In(k, ids) } }