【问题标题】:Change more than one row in postgresql在postgresql中更改多行
【发布时间】:2021-05-03 01:41:57
【问题描述】:

我需要使用 2 个数组更改我的数据库中的行,首先存储我需要更改的行的名称,然后存储 val。我添加了代码,以了解我想要做什么。我可以向我的数据库发出 1 个请求吗

func update_1(){
    key := []string{"Name1", "Name2", "Name4"}
    val := []string{"1", "2", "4"}
    for i, _ := range key{
        _, err := db.Exec("UPDATE table SET val = $1 WHERE name = $2",val[i], key[i])
        if err != nil {
            errorLog.Println(err)
            return
        }
    }
}

【问题讨论】:

  • SQL's case statement 可能是可能的,也请包含您的代码作为文本
  • 已编辑,并将我的代码作为文本包含在其中
  • 我发现了这个关于mysql的类似问题,也许它回答了你的问题:stackoverflow.com/questions/25674737/…
  • 如果我使用SQL的case语句,我该如何使用数组?
  • 您需要在运行时生成 sql。遍历切片中的每个条目并在 sql 中为其添加一个案例。

标签: sql postgresql go


【解决方案1】:

您可以将数组作为参数传递给 Postgres 查询。然后就是简单的unnest()update

update t
    set val = u.val
    from unnest(:ar_names, :ar_vals) u(name, val)
    where t.name = u.name;

【讨论】:

  • db.Exec("update test set val = u.val from unnest($1::bigint[], $2::character varying[]) u(name, val) where test.name = u.name", pq.Array([]int{1, 3}), pq.Array([]string{"228", "228"})) 我在 golang 中的最终请求
猜你喜欢
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 2016-12-31
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 2021-03-13
  • 1970-01-01
相关资源
最近更新 更多