Sqlite:如果结果为空,则为max子查询设置默认值
我想为表中的子组增加一个序列号,但如果子组不存在,则序列应以1开始: 例如,在下面的示例中,如果表中不存在Sqlite:如果结果为空,则为max子查询设置默认值,sql,sqlite,subquery,default,max,Sql,Sqlite,Subquery,Default,Max,我想为表中的子组增加一个序列号,但如果子组不存在,则序列应以1开始: 例如,在下面的示例中,如果表中不存在class=5的记录,我们希望将sequence设置为1;如果存在此类记录,则序列值应取最大序列值(在子组class=5)+1: 问题是上述方法对于初始情况不起作用。只需使用IFNULL(query,0)函数围绕查询即可 在这些情况下,功能非常方便: UPDATE order SET class = 5, sequence = coalesce( (SELECT ma
class=5的记录,我们希望将sequence设置为1;如果存在此类记录,则序列值应取最大序列值(在子组class=5
)+1:
问题是上述方法对于初始情况不起作用。只需使用IFNULL(query,0)
函数围绕查询即可
在这些情况下,功能非常方便:
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等。hm,这值得一提,因为添加了“与大多数人一起工作”功能。。。我的awfull self总是在谷歌上搜索“NVL SQL引擎名称备选方案”;-)
UPDATE order
SET class = 5,
sequence = coalesce(
(SELECT max(sequence)
FROM order
WHERE class=5),
0
) + 1
WHERE order_id = 104