假设我有一个名为“ordernum”的字段的表,它表示给定行集的顺序。现在假设我删除了其中一行。什么类型的查询最适合重新分配订单号,以便它们保持顺序?
以下是一个例子:
id group_id name ordernum active
的 ----------------------------------------------- ----
0 0 ______________ _______________ '名1' __________ 5__________true
1 _______________ 0 _______________ '名称2' __________ 4__________true
2 _______________ 0 _______________ 'NAME3' __________ 3__________true
3 _______________ 1 _______________ 'NAME4' __________ 2__________true
4 _______________ 1 _______________ 'NAME5' _________ 1__________true
5 _______________ 1 _______________ 'Name6' _________ NULL __________假
现在,如果我删除id ='4'的列,我将如何重置该特定组的'ordernum'字段中的值?这有可能吗?
或者如果我添加了一个新行。 (第一次创建行时,它们按日期排序,但用户可以选择自己设置顺序。)
在我的表设计中,我有一个列'active'布尔值。如果'active'设置为false,则'ordernum'设置为 NULL 。否则应该给出订单号。
答案 0 :(得分:0)
您可以使用触发器进行删除:
update tbl
set ordernum = ordernum - 1
from deleted d
where d.active = 1
and group_id = d.group_id
and ordernum > d.ordernum
添加新行也不是什么大问题,但我不一定会使用触发器来插入。