属性のグループを格納し、それらを順番に並べたテーブルがあります。属性 (行) の 1 つがテーブルから削除される可能性があり、一連の位置を圧縮する必要があります。
たとえば、最初にこれらの値のセットがある場合:
+----+--------+-----+
| id | name | pos |
+----+--------+-----+
| 1 | one | 1 |
| 2 | two | 2 |
| 3 | three | 3 |
| 4 | four | 4 |
+----+--------+-----+
2 番目の行が削除されたので、後続のすべての行の位置を更新してギャップを埋める必要があります。結果は次のようになります。
+----+--------+-----+
| id | name | pos |
+----+--------+-----+
| 1 | one | 1 |
| 3 | three | 2 |
| 4 | four | 3 |
+----+--------+-----+
単一のクエリでこの更新を行う方法はありますか? どうすればこれを行うことができますか?
PS: システムは両方のエンジンをサポートするはずなので、SQLServer と Oracle の両方の例を教えていただければ幸いです。ありがとう!
更新:これは、ユーザーが自由に位置を変更したり、新しい行を追加または削除したりできるためです。位置はユーザーに表示されます。そのため、これらは常に一貫したシーケンスを表示する必要があります (このシーケンスは保存する必要があり、オンデマンドで生成することはできません)。