如何在SQL select查询中展开int对列表

时间:2015-07-09 09:04:43

标签: sql postgresql go sqlx

我有以下参数列表:

params := [(p_1, m_1), ..., (p_n, m_n)]  // p_i, m_i : int

现在我想构建一个通过列表并匹配参数的查询: ( for 之后的部分是我想写在 PostgreSQL 9.4中的伪代码)

SELECT * FROM X WHERE p = p_i AND m = m_i  for (p_i, m_i) in params

如何在Go中编写此查询(使用jmoiron.github.io/sqlx或标准database/sql)?

type Param struct {
    P, M int
}
params := []Param{{1,2}, {3,4}}
// ???

1 个答案:

答案 0 :(得分:1)

如评论中所述,IN检查应满足您的需求:

查看params以生成IN部分查询:

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,我使用了modl这是sqlx之上的实用程序。