如何在SQL select查询中展开int对列表
我有以下参数列表:如何在SQL select查询中展开int对列表,sql,postgresql,go,sqlx,Sql,Postgresql,Go,Sqlx,我有以下参数列表: params := [(p_1, m_1), ..., (p_n, m_n)] // p_i, m_i : int 现在我想构建一个查询,通过列表匹配参数: (for后面的部分是一个伪代码,我想在PostgreSQL9.4中编写) 如何在Go中编写此查询(使用或标准数据库/sql) 如注释所述,检查中的应满足您的需要: 在查询的部分中,检查参数以生成: paramStr := make([]string, len(params), len(params)) for i,
params := [(p_1, m_1), ..., (p_n, m_n)] // p_i, m_i : int
现在我想构建一个查询,通过列表匹配参数:
(for后面的部分是一个伪代码,我想在PostgreSQL9.4中编写)
如何在Go中编写此查询(使用或标准数据库/sql
)
如注释所述,检查中的
应满足您的需要:
在查询的
部分中,检查参数以生成:
paramStr := make([]string, len(params), len(params))
for i, p := range params {
paramStr[i] = fmt.Sprintf("(%d, %d)", p.P, p.M)
}
然后,加入params并执行它:
err := dbm.Select(&rows, "SELECT * FROM X WHERE (p, m) IN (%s)",
strings.Join(paramStr, ","))
在这里,对于select,我使用了它,它是一个在sqlx
之上的实用程序,我对Go一无所知,但是在SQL中你可以使用它:其中(p,m)在((1,2),(3,4),…)
我认为在生产中应该使用sqlx.in
。但现在这是一个细节。
paramStr := make([]string, len(params), len(params))
for i, p := range params {
paramStr[i] = fmt.Sprintf("(%d, %d)", p.P, p.M)
}
err := dbm.Select(&rows, "SELECT * FROM X WHERE (p, m) IN (%s)",
strings.Join(paramStr, ","))