【发布时间】:2016-08-11 04:49:06
【问题描述】:
从 http://jinzhu.me/gorm/advanced.html#sql-builder 开始,我应该能够使用 WHERE IN 和单个 (?) 更新多行,并将切片传递给单个 ?,而不是 WHERE IN (?,?,?,?)。
来自jinzhu.me的示例如下:db.Exec("UPDATE orders SET shipped_at=? WHERE id IN (?)", time.Now, []int64{11,22,33})。这是 gorm 的测试示例,显示它可以正常工作。 https://github.com/jinzhu/gorm/blob/021d7b33143de37b743d1cf660974e9c8d3f80ea/main_test.go#L449
这对我不起作用:
var availableIds []int
for _, p := range v.Products {
availableIds = append(availableIds, p.Id)
}
log.Println(availableIds)
db.Exec("UPDATE product_supplier SET deleted_at=? WHERE supplier_id = ? AND sku NOT IN (?)", time.Now(), 3, availableIds)
输出:
2016/04/19 07:48:44 [336 338 337 306 329 94 79 43 57 313 108 122 126 127 124 125 123 221 93 330 335 333 312]
(sql: expected 2 arguments, got 25)
当我尝试硬编码时,我遇到了同样的问题:
db.Exec("UPDATE product_supplier SET deleted_at=? WHERE supplier_id = ? AND sku NOT IN (?)", time.Now(), 3, []int{313, 108})
输出:
(sql: expected 2 arguments, got 4)
解决方案:
代码实际上根本没有错误。我是不是很傻 - 我的实际代码中有一个额外的参数,而不是我应该有的。我只是没有正确地将其翻译为堆栈溢出。我的错。
【问题讨论】: