如何在 SQL select 查询中展开 int 对列表
How to unfold a list of int pairs in SQL select query
我有以下参数列表:
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}}
// ???
如评论所述,IN
检查应该可以满足您的需求:
检查参数以生成查询的 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
之上的实用程序。
我有以下参数列表:
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}}
// ???
如评论所述,IN
检查应该可以满足您的需求:
检查参数以生成查询的 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
之上的实用程序。