在 Go 的数据库/SQL 中使用切片处理 IN 查询
在使用 database/sql 包进行 SQL 查询时,开发人员可能会遇到以下挑战:处理 IN 子句和切片参数。出现此问题的原因是数据库/sql 不检查查询并直接将参数传递给驱动程序。
考虑以下示例:
<code class="go">inq := strings.Join(artIds, ",") rows, err = db.Query("SELECT DISTINCT title FROM tags_for_articles LEFT JOIN tags ON tags.id = tags_for_articles.tag_id WHERE article_id IN (?)", inq)</code>
此查询不起作用,因为当准备为语句时,绑定变量“?”对应于单个参数。但是,我们需要基于切片长度的可变数量的参数。尝试使用字符串连接来解决此问题(如尝试的解决方案中所示)会导致错误。
使用 SQLx 包的解决方案
sqlx 包提供了更方便的解决方案以及使用其 In 函数处理此类查询的惯用方法。通过将查询和切片作为参数传递给 sqlx.In,我们可以在将查询发送到数据库之前对其进行处理。
<code class="go">var levels = []int{4, 6, 7} query, args, err := sqlx.In("SELECT * FROM users WHERE level IN (?);", levels)</code>
处理查询后,我们可以使用生成的查询字符串和参数db.Query() 照常。
要进一步参考,您可以参考 Godoc 以获取有关 InQueries 的信息。通过采用这种方法,开发人员可以在 Go 程序中有效处理带有切片参数的 IN 查询。
以上是## 如何在 Go 的数据库/SQL 中处理带有切片的 IN 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!