我的 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/