我希望解决方案如下表所示:
---------------------
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
值