gpt4 book ai didi

java - H2 - 使用索引号更新每行(0,1,2,3,..)

转载 作者:行者123 更新时间:2023-12-01 09:32:24 24 4
gpt4 key购买 nike

我的 H2 数据库中有一个表,其中存储一些有序列表:

CREATE TABLE IF NOT EXISTS items 
(
f_id INTEGER NOT NULL PRIMARY KEY,
f_name VARCHAR(255) NOT NULL,
f_index INTEGER NOT NULL UNIQUE
)


|f_id|f_name|f_index|
|1 |A |1 |
|2 |C |3 |
|3 |B |4 |
|4 |D |2 |

当我删除项目“D”时,我需要将 C 的索引更新为 2,将 B 的索引更新为 3。

当我尝试这样做时,我快要疯了。我不想简单地

UPDATE items SET f_index = f_index-1 WHERE f_index > ?

因为我担心我的表格可能包含间隙(由未知原因引起),所以我寻找类似的东西

SqlRowSet rowSet = jdbcTemplate.queryForRowSet("SELECT f_name FROM items ORDER BY f_index");
int i = 0;
while (rowSet.next()) {
String name = rowSet.getString("f_name");
jdbcTemplate.update("UPDATE items SET f_index = ? WHERE f_name= ?", i++, name);
}

但更优雅。

H2有什么办法可以满足我的需求吗?

最佳答案

如果你只想使用h2那么你可以使用下面的语句

merge into items (f_id, f_index) key(f_id) select f_id, rownum()  from items order by f_index

关于java - H2 - 使用索引号更新每行(0,1,2,3,..),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39301068/

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