首页 > 文章列表 > GORM中使用双括号的where子句实现"In"操作

GORM中使用双括号的where子句实现"In"操作

469 2024-02-03
问题内容

我正在使用 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,
                    },
                },
            },
        )