mysql - 我如何在 Go 中进行 IN 查询?

标签 mysql go

我想使用“database/sql”包在 Go 中运行这样的查询:

SELECT id, name FROM users WHERE id IN (1,2,3,4);

如何在查询命令中使用变量替换?例如,我想这样做(这当然行不通):

db.Query("SELECT id, name FROM users WHERE id IN (?)", []int{1,2,3,4})

最佳答案

@Volker 在评论中建议,某些数据库驱动程序可能能够为您扩展 slice 。任何驱动程序都可以单独处理 slice 元素,但是:

db.Query("SELECT id, name FROM users WHERE id IN (?, ?, ?, ?)", 1, 2, 3, 4)

当然,您在编写时需要确切知道 slice 中将包含多少元素,但事实可能并非如此。生成正确数量的问号非常简单,并为您提供了一个通用的解决方案:

ints := []interface{}{1,2,3,4}
marks := strings.Repeat("?,", len(ints) - 1) + "?"
db.Query("SELECT id, name FROM users WHERE id IN (" + marks + ")", ints...)

如果您的 slice 可能是空的,您将不得不以某种方式处理它。

关于mysql - 我如何在 Go 中进行 IN 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16627602/

相关文章:

mongodb - 根据 bool 值进行编辑或创建

xml.Unmarshall 多根 XML 在 Go

go - 如何使用 goroutine 池

mysql - 通过 SolrJ 索引数据库

mysql - 连接多个表和 GROUP_CONCAT

go - 扫描仪可以有 slice 接收器吗?

google-app-engine - 从 Flex 迁移到标准时,GAE Go 1.11 实例启动问题

MySQL 无法与 PHP 连接

mysql - 如何在mysql中按降序对两个不同的日期列进行排序?

php - Dbforge 在 CodeIgniter 中导致错误编号 1064