假设我从 mysql 数据库表中获得以下结果集:
+----+------+-------+
| ID | type | value |
+----+------+-------+
| 8 | A | 1435 |
| 9 | B | 7348 |
| 10 | A | 1347 |
| 11 | A | 3478 |
| 12 | A | 4589 |
| 13 | B | 6789 |
+----+------+-------+
我想删除行 ID 8 并将字段“值”中的值向下推,这样每一行都具有前一个条目的值,但仅影响字段“类型”与行相同的那些被删除(在这种情况下为“A”)。
也就是说,删除行 id 8 最终应该会产生以下结果:
+----+------+-------+
| ID | type | value |
+----+------+-------+
| - | - | - | *
| 9 | B | 7348 | |
| 10 | A | 1435 | * |
| 11 | A | 1347 | * |
| 12 | A | 3478 | * |
| 13 | B | 6789 | V
+----+------+-------+
ID 10 继承了 ID 8 的值,然后 ID 11 继承了 ID 10,依此类推。但是请注意,类型为“B”的行不受影响。
所以问题是:有什么方法可以执行这种值的“移位”,而不必逐行查询和更新每一行?在一个理想的世界里,我会做一个查询来做移位,然后另一个来删除行,但我不太确定这是否可能。
(我也不想使用触发器,因为我打算将所有应用程序逻辑封装在应用程序本身中)