我正在寻找一种将int切片或逗号分隔的字符串传递到数据库/ sql查询中的方法

时间:2018-09-25 09:51:38

标签: postgresql go

我的目标是要获取一组相关父记录的相关子记录列表。

使用SQL可以完成以下工作

SELECT id FROM children WHERE parent_id IN ( 
    19036,19037
)

使用golang时出现以下错误。

使用逗号分隔的字符串时

import (
    "database/sql"
    "github.com/lib/pq"
)
// db is a valid XODB struct generated from https://github.com/xo/xo

var ids []string{"19036","19037"}

const sqlstr = `SELECT ` +
    `id ` +  
    `FROM children ` +
    `WHERE parent_id in ($1) `

q, err := db.Query(sqlstr, strings.Join(ids, ","))
if err != nil {
    return nil, err
}

导致pq:整数输入错误的语法:“ 19036,19037”

使用一片整数时

var ids []int{19036,19037}

const sqlstr = `SELECT ` +
    `id ` +  
    `FROM children ` +
    `WHERE parent_id in ($1) `

q, err := db.Query(sqlstr, ids)
if err != nil {
    return nil, err
}

导致sql:转换参数$ 1类型:不支持的类型[] int,一个int切片。

使用fmt.Sprintf创建sql字符串有效

var ids []string{"19036","19037"}

var sqlstr = `SELECT ` +
    `id ` +  
    `FROM children ` +
    `WHERE parent_id in ($1) `

sqlstr = fmt.Sprintf(sqlstr, strings.Join(ids, ","))
q, err := db.Query(sqlstr)
if err != nil {
    return nil, err
}

但是我正在寻找一种将int切片或逗号分隔的字符串传递到数据库/ sql in查询中的方法。你会怎么做?

0 个答案:

没有答案