首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要将sql-query转换为go-pg orm

需要将sql-query转换为go-pg orm
EN

Stack Overflow用户
提问于 2021-04-29 04:01:10
回答 1查看 77关注 0票数 0

有一个查询,如下所示

代码语言:javascript
复制
   q = 'select distinct t.uuid, t.tags
    from tags as t
    inner join tag_item ti on t.uuid = ti.item_id
    inner join tag_words tw on ti.tag_id = tw.id
    where tw.tag in (?) and ti.item_id in (?)'

如果我使用err := s.db.QueryContext(ctx, &resp, q, p1, p2),它工作得很好

但我并不总是有p1p2,所以我希望能够很好地将它们分开。我尝试了这样的东西:

代码语言:javascript
复制
    var resp []*models.TagRecord

    q := s.db.ModelContext(ctx, &resp).ColumnExpr("distinct tags.uuid, tags.tags")
    q = q.Join("inner join tag_item as ti").JoinOn("ti.item_id=tags.uuid")
    if len(filters.UUIDs) != 0 {
        q = q.JoinOn("ti.item_id IN (?)", pg.In(filters.UUIDs))
    }

    q = q.Join("inner join tag_words as tw").JoinOn("tw.id=ti.tag_id")
    if len(filters.Tags) != 0 {
        q = q.JoinOn("tw.tag IN (?)", pg.In(filters.Tags))
    }

    err := q.Select()

但是我得到了这个错误:

错误#42P01对表“tags”的FROM-子句条目的引用无效)

我做错了什么?我如何才能让它工作?

EN

回答 1

Stack Overflow用户

发布于 2021-04-29 15:08:25

我有一个聪明的想法来记录查询在普通sql中的样子,tx到这个线程的答案convert go-pg query into plain sql做到了,并弄清楚了如何让上面的代码工作,它被证明是相当简单的:

代码语言:javascript
复制
var resp []*models.TagRecord

q := s.db.ModelContext(ctx, &resp).ColumnExpr("distinct tag_record.uuid, tag_record.tags")
q = q.Join("inner join tag_item as ti").JoinOn("tag_record.uuid=ti.item_id")
if len(filters.UUIDs) != 0 {
    q = q.JoinOn("ti.item_id IN (?)", pg.In(filters.UUIDs))
}

q = q.Join("inner join tag_words as tw").JoinOn("ti.tag_id=tw.id")
if len(filters.Tags) != 0 {
    q = q.JoinOn("tw.tag IN (?)", pg.In(filters.Tags))
}

err := q.Select()

表标记别名为tag_record,因此更改了对该别名的调用,一切就绪)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67307137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档