我正在使用gorm与postgres数据库进行交互 . 我正在尝试通过使用DISTINCT ON和this question文档的查询进行ORDER BY,如何做到这一点并不容易 . 所以我需要以一种形式结束查询
SELECT * FROM (<subquery>) ORDER BY column;
乍一看,我似乎需要使用 db.QueryExpr()
将我的查询转换为表达式并围绕它构建另一个查询 . 然而,似乎gorm没有一种直接指定FROM子句的简单方法 . 我尝试使用 db.Model(expr)
或 db.Table(fmt.Sprint(expr))
,但模型似乎完全被忽略, fmt.Sprint(expr)
并没有完全按照我的想法返回 . 表达式包含一些私有变量 . 如果我可以将原始查询转换为完全解析的字符串,那么我可以使用 db.Table(query)
但我不确定是否可以在不运行它的情况下将查询生成为字符串 .
如果我有一个完全构建的gorm查询,我如何将它包装在另一个查询中以执行我正在尝试的ORDER BY?
1 回答
如果要编写将要执行的原始SQL(包括具有SQL子查询的SQL)并使用gorm将结果添加到对象,可以使用
.Raw()
和.Scan()
方法:您将对象的指针引用传递给
.Scan()
,其结构类似于生成的行,与您使用.First()
的方式非常相似 ..Raw()
也可以在查询中使用?
将数据添加到查询中,并将值作为逗号分隔的输入添加到函数中:有关如何使用SQL构建器的更多信息,
.Raw()
和.Scan()
请查看文档中的示例:http://gorm.io/advanced.html#sql-builder