相关文章推荐
精明的白开水  ·  MySQL插入循环存储过程问题:最后一行重复 ...·  3 周前    · 
沉稳的油条  ·  MySQL数据库精选(从入门使用到底层结构) ...·  3 周前    · 
有爱心的书签  ·  DATEDIFF(Transact-SQL) ...·  2 周前    · 
不拘小节的毛衣  ·  PostgreSQL操作-psql基本命令 ...·  6 天前    · 
豪爽的啄木鸟  ·  Statement Summary ...·  5 天前    · 
瘦瘦的大熊猫  ·  国家矿山安全监察局·  10 月前    · 
高大的茄子  ·  让广大青年在乡村一线激扬青春·  1 年前    · 
骑白马的羽毛球  ·  我和直男兵哥哥的故事(中)_哔哩哔哩_bil ...·  1 年前    · 
豪爽的冰淇淋  ·  戒烟的100个理由,你还没有被说服吗?_健康 ...·  1 年前    · 
玩足球的爆米花  ·  C#中char[]与string之间的转换- ...·  1 年前    · 
Code  ›  SQL + goLang --运行带有IN条件的select语句--并传递给它一个ids数组?开发者社区
golang sprintf select
https://cloud.tencent.com/developer/ask/sof/130839
飘逸的领结
2 年前
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
提问
问 SQL + goLang --运行带有IN条件的select语句--并传递给它一个ids数组?
Stack Overflow用户
提问于 2018-06-02 04:53:09
EN

我想执行以下逻辑-

SELECT some_column
FROM table_name
WHERE id IN (value1, value2, ...);

在我的go代码中,我有以下int数组来表示我的in:

idsToGet := []int{1,2}

我完全理解您通常会执行一个sprintf并传入您要查找的一个id……但是..。

我觉得有一种明智的方法可以做到这一点,而不是迭代数组,并对每个ID进行单独的调用。通过sprintf -有没有一种方法可以让我的IN子句自动包含数组中的所有内容?

全新的Go -我花了一个小时来解决这个问题,我让它在单id下工作-但不能在多个id下工作。

1 475 0 票数 0
EN
mysql
sql
go

回答 1

Stack Overflow用户

发布于 2018-06-02 10:14:58

您不希望使用 Sprintf 将原始值放入SQL中,这是一个坏习惯。您要做的是使用适当数量的占位符构建一些SQL,然后让库负责用占位符的值替换占位符。

如果您的阵列中有两个 int ,则需要构建以下内容:

SELECT some_column
FROM table_name
WHERE id IN (?, ?)

如果你有四个,那么你想要构建:

SELECT some_column
FROM table_name
WHERE id IN (?, ?, ?, ?)

诸若此类。您所需要的只是一个可以生成 n 占位符的简单函数;有很多方法可以做到这一点:

func placeholders(n int) string {
    ps := make([]string, n)
    for i := 0; i < n; i++ {
        ps[i] = "?"
    return strings.Join(ps, ",")
}

或者:

func placeholders(n int) string {
    var b strings.Builder
    for i := 0; i < n - 1; i++ {
        b.WriteString("?,")
 
推荐文章
精明的白开水  ·  MySQL插入循环存储过程问题:最后一行重复插入如何解决?
3 周前
沉稳的油条  ·  MySQL数据库精选(从入门使用到底层结构) - 不吃紫菜
3 周前
有爱心的书签  ·  DATEDIFF(Transact-SQL) - SQL Server | Microsoft Learn
2 周前
不拘小节的毛衣  ·  PostgreSQL操作-psql基本命令 - 沐春风-燕南飞
6 天前
豪爽的啄木鸟  ·  Statement Summary Tables | TiDB 文档中心
5 天前
瘦瘦的大熊猫  ·  国家矿山安全监察局
10 月前
高大的茄子  ·  让广大青年在乡村一线激扬青春
1 年前
骑白马的羽毛球  ·  我和直男兵哥哥的故事(中)_哔哩哔哩_bilibili
1 年前
豪爽的冰淇淋  ·  戒烟的100个理由,你还没有被说服吗?_健康促进_福建省卫生健康委员会
1 年前
玩足球的爆米花  ·  C#中char[]与string之间的转换-阿里云开发者社区
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号