我希望解决方案如下表所示:

---------------------
emp    lft   rgt
---------------------
Albert  1   12
Bert    2   3
Chuck   4   11
Donna   5   6
Eddie   7   8
Fred    9   10
--------------------


我已经手动插入了上面的示例值。但是我需要动态

如果要在此表中再插入一个条目,则可以将其放在表的顶部,中间或结尾。例如,如果我插入Ragu报告给Fred,那么在此过程之后,我需要的结果如下:

---------------------
emp    lft  rgt
---------------------
Albert  1   14
Bert    2   3
Chuck   4   13
Donna   5   6
Eddie   7   8
Fred    9   12
Ragu   10   11
--------------------


我需要重组数字以使用存储过程动态发生。

最佳答案

假设您要插入“ Earl” 6,9

在范围> 6范围内的任何人的左值上方。

UPDATE YOURTAB SET Lft = Lft + 1 where lft > 6;


然后为值大于+6的任何人更新相应的“ Rgt”。

UPDATE YOURTAB SET Rgt = Rgt + 1 where Rgt > 6;


将新行插入正确的位置。

将值插入“伯爵”,6、9

一种更简单,更可扩展的方法是将初始值插入倍数中
为100,那么您可以轻松地在现有范围之间插入新值。如果您插入了连续范围的6个新条目(150,125,112,106,103,101),这仍然需要您进行重组。

甚至更好地使用浮点数作为范围值,那么您将不需要重新组织,因为始终是现有条目之间的数字。
 即始终为(Lft of row after - Lft of row before) / 2

09-12 10:50