[英]Need to convert sql-query into go-pg orm
有一個看起來像這樣的查詢
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)
它工作正常
但我並不總是有p1
和p2
所以我希望能夠很好地分開它。 我試過這樣的事情:
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 對表“標簽”的 FROM 子句條目的引用無效)
我做錯了什么,我怎樣才能做到這一點?
有一個好主意來記錄查詢在普通 sql 中的樣子,tx to answers to this thread convert go-pg query into plain sql做到了,並想出了如何使上面的代碼工作,結果很簡單:
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,因此更改了對該別名的調用,並且對 go 都很好)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.