首頁 >後端開發 >Golang >在 gorm 處使用「IN」的 where 子句的雙括號

在 gorm 處使用「IN」的 where 子句的雙括號

WBOY
WBOY轉載
2024-02-10 08:12:08934瀏覽

在 gorm 处使用“IN”的 where 子句的双括号

php小編新一為您帶來gorm的一個重要特性-在gorm中使用"IN"的where子句的雙括號。這個特性可以讓我們更方便地查詢多個值是否在某個欄位中,簡化了查詢語句的編寫,提高了程式碼的可讀性和可維護性。透過使用雙括號,我們可以在where子句中傳入一個切片,其中包含了需要查詢的值,gorm會自動將其轉換為"IN"子句來執行查詢操作。這個特性在實際開發上非常實用,幫助我們更有效率地處理複雜的資料查詢需求。

問題內容

我正在使用 where 子句透過 gorm 更新資料庫中的值

db.Session(&gorm.Session{FullSaveAssociations: true}).Where("id IN (?)", ids).Updates(users)

ids 是 ids 的一部分,使用者是結構

問題是我收到此錯誤

錯誤1241(21000):運算元應包含1列

#gorm產生的sql就是這個。看起來它創建了一個雙括號,導致了這個錯誤。但我不知道如何解決這個問題

UPDATE `users` SET `status`='CANCELED',`updated_at`='2023-12-12 20:39:40.904' WHERE id IN (('066a75df-ba11-49c8-9b39-b1cce029760e','5f95f93e-94a5-46d1-86eb-dde83437ea26'))

編輯 1

#我從 (?) 刪除 () 也有相同的效果

db.Session(&gorm.Session{FullSaveAssociations: true}).Where("id IN ?", ids).Updates(users)

UPDATE `users` SET `status`='CANCELED',`updated_at`='2023-12-12 21:18:46.537' WHERE id IN (('066a75df-ba11-49c8-9b39-b1cce029760e','5f95f93e-94a5-46d1-86eb-dde83437ea26'))

錯誤1241(21000):操作數應包含1列

#解決方法

我在這裡找到了答案https://github. com/go-gorm/ gorm/issues/5014https://gorm.io/docs/sql_builder。 html#子句

使用這個子句我可以做這樣的事情

query.Clauses(
            clause.Where{
                Exprs: []clause.Expression{
                    clause.Expr{
                        SQL:                "id IN ?",
                        Vars:               []interface{}{ids},
                        WithoutParentheses: true,
                    },
                },
            },
        )

以上是在 gorm 處使用「IN」的 where 子句的雙括號的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除