【问题标题】:How to execute nested query in golang gorm如何在 golang gorm 中执行嵌套查询
【发布时间】:2017-05-12 13:01:03
【问题描述】:

我想在 golang gorm 中执行如下查询:

select * from MY_TABLE where MY_FIELD in (select max(MY_FIELD) as MY_FIELD from MY_TABLE group by ANOTHER_FIELD)

gorm 中除了原始查询还有其他方法吗?

【问题讨论】:

  • 如果有数据类型结构就好了

标签: sql go orm go-gorm


【解决方案1】:

您可以构建原始查询

subQuery := db.Model(Table_Name).Select(field).Group(field).QueryExpr()

err := db.Model(TableName).Scan(outPutStructArray).Where("myfiled IN (?)", subQuery).Error

并适当处理错误

【讨论】:

    【解决方案2】:

    您可以通过构建查询来做到这一点。看看这个例子:

    func FindProspects(categories *string, cities *string, hasEmail *bool, hasContactperson *bool, limit int64, offset int64) []*gModels.Prospect {
        var prospects []*gModels.Prospect
    
        query := env.DB().Table("prospects").Select("prospects.id, prospects.name")
    
        if categories != nil {
            query = query.Joins("JOIN prospect_categories ON prospect_categories.prospect_id = prospects.id").Where("prospect_categories.category_name IN (?)", strings.Split(*categories, ","))
        }
    
        if cities != nil {
            query = query.Where("prospects.city IN (?)", strings.Split(*cities, ","))
        }
    
        if hasEmail != nil && *hasEmail == true {
            query = query.Where("prospects.id IN (SELECT emails.prospect_id FROM emails WHERE emails.prospect_id = prospects.id)")
        }
    
        if hasContactperson != nil && *hasContactperson == true {
            query = query.Where("prospects.id IN (SELECT contact_people.prospect_id FROM contact_people WHERE contact_people.prospect_id = prospects.id)")
        }
    
        query = query.Order("prospects.name ASC")
    
        query.Limit(int(limit)).Offset(int(offset)).Find(&prospects)
    
        return prospects
    }
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-15
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-04
      • 1970-01-01
      • 2021-12-25
      相关资源
      最近更新 更多