Sqlite:如果结果为空,则为最大子查询设置默认值
Posted
技术标签:
【中文标题】Sqlite:如果结果为空,则为最大子查询设置默认值【英文标题】:Sqlite: Setting default value for a max sub-query if result is null 【发布时间】:2013-02-16 06:58:17 【问题描述】:我想为表中的子组增加一个序列号,但如果子组不存在,那么序列应该从 1 开始:
例如,在下面,如果class=5
的表中不存在记录,我们希望将sequence设置为1;如果存在这样的记录,则 sequence 应取值 max sequence (in subgroup class=5
) + 1:
update order set class=5, sequence=(select max(sequence) from order
where class=5)+1 where order_id=104;
问题是上述不适用于初始情况。
【问题讨论】:
【参考方案1】:在这些情况下,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 等...
【讨论】:
嗯,这值得一票,因为“与大多数人一起工作”添加......我糟糕的自我总是用谷歌搜索“NVL SQL-Engine Name Alternative”;-)【参考方案2】:只需用IFNULL( QUERY, 0 )
函数包围您的查询
http://www.sqlite.org/lang_corefunc.html#ifnull
【讨论】:
以上是关于Sqlite:如果结果为空,则为最大子查询设置默认值的主要内容,如果未能解决你的问题,请参考以下文章