序列数值为IF NULL的MYSQL Update列-续序列

时间:2018-12-11 16:13:11

标签: mysql sequence

我正在尝试保留表格的运行序列号。 我将每天晚上按计划运行查询以更新表,并根据最后一个数字+1填充序列号并继续。

我的桌子:mis_order_charges

ID    item_id    SEQ
1       20        1
5       15        2
6       21        3
9       20       NULL
12      21       NULL

因此,我想运行一个更新查询以用4和5填充NULL,当然每次运行时都要继续执行此操作。

我尝试了一些事情:

insert into misc_order_charges (seq)
SELECT @row := @row + 1 as row
FROM misc_order_charges moc, (SELECT @row := 0) r where seq is null;

没用

UPDATE misc_order_charges
JOIN (SELECT @rank := 0) r
SET seq=@rank:=@rank+1 where misc_order_charges.seq is null;

上面的方法有效,但是当然会重置计数,因此NULL值为1和2

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以使用MAX()函数获得最大值,用作等级变量的基础。

UPDATE misc_order_charges
JOIN (SELECT @rank := (SELECT MAX(T.SEQ) FROM misc_order_charges as T)) r
SET seq=@rank:=@rank+1 where misc_order_charges.seq is null;

这将获得第一个排名,因为表中的SEQ编号最高。