我正在处理一些遗留代码/数据库,需要在数据库中添加一个字段,该字段将记录与该(外部)id相关的序列号。
示例产品表(当前):
PRODUCT_ID some_stuff
1 ...
1 ...
1 ...
2 ...
2 ...
1 ...
产品表没有自动增量。
我需要添加一个sequenceid列,它为每个帐户单独递增,实现:
product_id SEQ another_stuff
1 1 ...
1 2 ...
1 3 ...
2 1 ...
2 2 ...
1 4 ...
序列与product_id有关。
有没有办法让它有效?
答案 0 :(得分:0)
首先添加列:
alter table add column seq int;
然后你可以使用变量来做到这一点:
set @rn = 0;
set @p = -1;
update products p
set seq = (@rn := if(@p = product_id, @rn + 1,
if(@p := product_id, 1, 1)
)
)
order by product_id;
请注意,您无法控制行的顺序,因为您似乎没有一个字段说明哪一行应该是第一行。