使用数组进行 Go postgres 的 `SELECT * IN`。

5

我有一个简单的选择语句:

Select * FROM X where X.name in ("bob", "joe") and X.phone='123'

在postgresql中可以正常工作,

我的Go代码中有以下代码:

var phone string = "123"
var names []string = []string{"bob", "joe"}
sqlStatement := `Select * FROM X where X.name in ($1) and X.phone=$2`
rows, sqlerr := db.Query(sqlStatement, names, phone)

但由于某种原因,我从那个SQL中出错了。

Scan不受支持,将driver.Value类型存储到*string类型中

我如何在sql语句中使用我的names数组?

注意:如果我使用fmt.printf并将sql语句粘贴到Postgres中,则可以获取数据。如果我删除$1并手动输入字符串,则可以获取数据。


使用 X.name = ANY ($1)lib/pq 数组类型 - mkopriva
1
可能是Go和Postgres中的IN子句重复问题 - Jonathan Hall
2个回答

6

复制并粘贴一些工作正常的Go PostgreSQL代码片段:

import (
    "database/sql"
    "github.com/lib/pq"
)

    query := `
            . . .
            WHERE code = ANY($1)
           . . .

        `

    codes := []string{"JFK", "LGA", "EWR"}
    rows, err := db.Query(query, pq.Array(codes))

0

我使用http://jmoiron.github.io/sqlx/#inQueries解决了这个问题。

var phone string = "123"
var names []string = []string{"bob", "joe"}
sqlStatement := `Select * FROM X where X.name in (?) and X.phone=?`
sqlStatement, args, err := sqlx.In(sqlStatement, names, phone)
sqlStatement = db.Rebind(sqlStatement)
        rows, sqlerr := db.Queryx(sqlStatement, args...)

现在这个正确地返回。

另一种解决方法是使用fmt.Sprintf()函数,将?转换为%s


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接