gpt4 book ai didi

java - 更新查询返回没有更新的列

转载 作者:行者123 更新时间:2023-11-29 14:15:43 25 4
gpt4 key购买 nike

我正在使用来自 java 准备语句的 Update 查询。在此始终一次只更新一行,我需要知道更新了任何列值或更新了列值的数量。这些可能吗?如果可能的话怎么办?

最佳答案

没有内置的东西。您可以使用可写的 CTE 来完成,但这不会非常有效:

具有以下测试数据:

create table test (id integer primary key, col1 text, col2 integer, col3 date);

insert into test
values
(1, 'foo', 42, date '2018-02-07');

以下更新将返回 1,因为只有一列发生了变化

with updated as (
update test
set col1 = 'x',
col2 = 42,
col3 = date '2018-02-07'
where id = 1
returning *
)
select (o.col1 is distinct from u.col1)::int
+ (o.col2 is distinct from u.col2)::int
+ (o.col3 is distinct from u.col3)::int as columns_changed
from test o
join updated u on u.id = o.id;

这是有效的,因为 CTE 的最终 select 语句在实际表中看不到 update 语句的结果。

如果您只需要知道是否发生了某些更改(而不是确切的列数),您可以将语句简化为:

with updated as (
update test
set col1 = 'x',
col2 = 42,
col3 = date '2018-02-07'
where id = 1
returning *
)
select (o is distinct from u) as was_changed
from test o
join updated u on u.id = o.id;

第三种选择是使用 hstore模块:

with updated as (
update test
set col1 = 'x',
col2 = 42,
col3 = date '2018-02-07'
where id = 1
returning *
)
select hstore(u) - hstore(o) as modified_columns
from test o
join updated u on u.id = o.id;

会返回:

modified_columns
----------------
"col1"=>"x"

这意味着 col1 被更新为值 'x'

关于java - 更新查询返回没有更新的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48660942/

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