gpt4 book ai didi

postgresql - 在 golang 中使用 postgres IN 子句

转载 作者:IT王子 更新时间:2023-10-29 02:21:35 26 4
gpt4 key购买 nike

我一直在尝试在 golang 中使用 postgres IN 子句,但一直出错。这是我要执行的查询。

SELECT id1 FROM my_table WHERE type = (an int) AND id2 = (an int) AND id1 IN (list of UUIDs)

我使用这段代码构造了这个查询,但出现了以下错误。

var params []interface{}
inCondition := ""
params = append(params, type)
params = append(params, id2)
for _, id := range id1 {
params = append(params, id)
if inCondition != "" {
inCondition += ", "
}
inCondition += "?"
}
query := fmt.Sprintf(`SELECT id1 FROM my_table WHERE type = ? AND id2 = ? AND id1 IN (%s)`, inCondition)
rows, err := db.Query(query, params...)

我得到的查询:

SELECT id1 FROM my_table WHERE type = ? AND id2 = ? AND id1 IN (?, ?, ?)

参数输出:

[]interface {}=[0 7545449 d323f8d5-ab97-46a3-a34e-95ceac2f3a6a d323f8d5-ab97-46a3-a34e-95ceac2f3a6b d323f8d5-ab97-46a3-a34e-95ceac2f3a6d]

错误:

pq: syntax error at or near \"AND\""

我错过了什么?或者,我将如何让它工作? id1 是 UUID 的一个片段,其长度是可变的。

最佳答案

遇到了类似的问题。不记得我到底是从哪里捡到的,但我记得在处理整数类型数组与字符串类型数组时仍然遇到问题。我必须做的是拥有一个本地自定义类型并为其返回一个驱动程序兼容值。请参见下面的示例。

// Int64Array is a type implementing the sql/driver/value interface
// This is due to the native driver not supporting arrays...
type Int64Array []int64

// Value returns the driver compatible value
func (a Int64Array) Value() (driver.Value, error) {
var strs []string
for _, i := range a {
strs = append(strs, strconv.FormatInt(i, 10))
}
return "{" + strings.Join(strs, ",") + "}", nil
}

强烈建议查看 sqlx .写了一个简单的 orm 包装器,叫做 papergres让我的 go + postgres 生活更轻松 :) 试一试。

关于postgresql - 在 golang 中使用 postgres IN 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46700845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com