如何在Go中进行IN查询?

时间:2013-05-18 18:29:36

标签: mysql go

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

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})

1 个答案:

答案 0 :(得分:2)

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

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

当然,您需要确切地知道在写入时切片中将有多少元素,这可能不是这种情况。生成正确数量的问号很简单,并为您提供一般解决方案:

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

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