gpt4 book ai didi

spring - 如何根据多个条件更新多行?

转载 作者:行者123 更新时间:2023-11-29 12:07:00 25 4
gpt4 key购买 nike

我正在尝试为多行更新表中的单个列,但根据其他两列的唯一 where 条件,每一行都会有不同的更新日期值。我正在从 csv 中读取数据,并根据其他两列中的值的组合简单地更新所在行中的日期列。

我看到了

SQL update multiple rows based on multiple where conditions

但是 SET 值不会是静态的,并且需要匹配其他两列值为真的每一行。这是因为在我的表中,其他两列的组合始终是唯一的。

伪代码

UPDATE mytable SET date = (many different date values)
WHERE col_1 = x and col_2 = y

对于 csv 中的每一行,col_1 和 col_2 值都会发生变化,因为这两个值的组合是唯一的。我正在研究在 postgres 中使用 CASE,但我知道它不能用于多列。

基本上,csv 行有一个日期值,必须在记录中更新该日期值,其中 col_1 和 col_2 等于它们在 csv 行中的各自值。如果数据库中不存在这些值,它们将被忽略。

有没有一种优雅的方法可以在单个查询中执行此操作?此查询是 spring 批处理作业的一部分,因此我可能无法使用 native postgres 语法,但我什至难以理解查询的格式,因此我以后可以担心语法。我需要多个更新语句吗?如果是这样,我如何在 Spring Batch 作业的写入步骤中实现这一点?

编辑:添加一些样本数据来解释过程

CSV 行:

date,        col_1,    col_2
2021-12-30, 'abc', 'def'
2021-05-30, 'abc', 'zzz'
2021-07-30, 'hfg', 'xxx'

我需要通过查询找到 col_1='abc' AND col_2=def 的记录,然后将日期列更改为 2021-12-30。我需要为每一行执行此操作,但我不知道如何设置 UPDATE 查询的格式。

最佳答案

您可以将 CSV 数据插入(临时)表(例如 mycsv)并使用带有 FROM 子句的 UPDATE。例如:

CREATE TEMP TABLE mycsv (date DATE, col_1 TEXT, col_2 TEXT);
COPY mycsv FROM '/path/to/csv/csv-file.csv' WITH (FORMAT csv);
UPDATE mytable m SET date = c.date
FROM mycsv c WHERE m.col_1 = c.col_1 AND m.col_2 = c.col_2;

关于spring - 如何根据多个条件更新多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58489055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com