5

我想为表中的子组增加一个序列号,但如果子组不存在,那么序列应该从 1 开始:

例如,在下面,如果表中不存在任何记录,我们希望将序列设置为 1 class=5;如果存在这样的记录,则序列应取值 max 序列(在子组中class=5)+ 1:

update order set class=5, sequence=(select max(sequence) from order 
where class=5)+1 where order_id=104;

问题是上述不适用于初始情况。

4

2 回答 2

7

在这些情况下,函数COALESCE()非常方便:

UPDATE order
SET class = 5,
    sequence = coalesce(
        (SELECT max(sequence)
         FROM order 
         WHERE class=5),
        0
    ) + 1
WHERE order_id = 104

COALESCE大多数其他 SQL 引擎(MySQL、Postgres 等)都支持它的另一个好处……

于 2013-02-16T07:02:56.663 回答
4

只需用IFNULL( QUERY, 0 )函数包围您的查询

http://www.sqlite.org/lang_corefunc.html#ifnull

于 2013-02-16T07:01:15.007 回答