首頁 > 後端開發 > Golang > 主體

如何在 Go 中使用切片透過 IN 子句查詢資料庫?

DDD
發布: 2024-10-26 15:44:02
原創
158 人瀏覽過

How to Query a Database with an IN Clause Using a Slice in Go?

在Go 中使用帶有切片的IN 子句查詢資料庫

在資料庫查詢中,通常使用基於值的子集來過濾結果IN 子句。然而,在 Go 中使用整數切片時,創建語法上有效且符合慣用語的 IN 子句可能具有挑戰性。

考慮以下查詢,該查詢嘗試從兩個連接表中檢索不同的標題。 IN 子句填入了名為 artIds 的切片的內容:

<code class="go">inq := "6,7" //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>
登入後複製

為簡潔起見,已省略錯誤處理。查詢失敗,因為database/sql將參數直接傳遞給驅動程序,驅動程式需要可變數量的bindvars,取決於切片的長度。

或者,使用靜態IN子句的查詢將成功執行:

<code class="go">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 (6,7)", inq)</code>
登入後複製

此問題的解決方案是使用sqlx 庫,它提供了對資料庫查詢的更多控制。 sqlx.In 函數可用於處理帶有 IN 子句的查詢並動態建立必要的綁定變數:

<code class="go">var levels = []int{4, 6, 7}
query, args, err := sqlx.In("SELECT * FROM users WHERE level IN (?);", levels)</code>
登入後複製

然後可以使用產生的查詢和參數來執行準備好的語句。使用 sqlx.In 函數可確保查詢在語法上有效,並且可以使用給定的值切片有效執行。

以上是如何在 Go 中使用切片透過 IN 子句查詢資料庫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!