【问题标题】:Sqlite: Setting default value for a max sub-query if result is nullSqlite:如果结果为空,则为最大子查询设置默认值
【发布时间】: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;

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

【问题讨论】:

    标签: sql sqlite subquery default max


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-23
      • 2016-01-02
      • 2017-05-15
      • 2017-12-05
      • 2013-09-10
      • 2016-09-01
      • 1970-01-01
      • 2017-12-03
      相关资源
      最近更新 更多