我有一个表,它存储一组属性并使它们按顺序排列。有可能从表中删除其中一个属性(行),并且应该压缩位置序列。
例如,如果我最初有这些值集:
+----+--------+-----+
| id | name | pos |
+----+--------+-----+
| 1 | one | 1 |
| 2 | two | 2 |
| 3 | three | 3 |
| 4 | four | 4 |
+----+--------+-----+
并且第二行被删除,所有后续行的位置都应该更新以缩小差距。结果应该是这样的:
+----+--------+-----+
| id | name | pos |
+----+--------+-----+
| 1 | one | 1 |
| 3 | three | 2 |
| 4 | four | 3 |
+----+--------+-----+
有没有办法在单个查询中进行此更新?我怎么能这样做?
PS:我很欣赏 SQLServer 和 Oracle 的例子,因为系统应该支持这两个引擎。谢谢!
更新:这样做的原因是允许用户随意修改位置,以及添加或删除新行。位置显示给用户,因此,这些位置应始终显示一致的序列(并且该序列必须存储,而不是按需生成)。