代码之家  ›  专栏  ›  技术社区  ›  room2web

选择查询以将整数修订计数器递增1或将其设置为0进行第一次修订

  •  0
  • room2web  · 技术社区  · 10 年前

    我有一个版本化的对象,它存储在关系数据库中。条目由整数ID和修订号标识。在存储新版本时,我希望自动增加数字

    -- Describe FOO
    CREATE TABLE foo (
        id INTEGER NOT NULL, 
        revision INTEGER NOT NULL, 
        content TEXT,
        PRIMARY KEY (id, revision)
    )
    

    如果修订已经存在,我希望使用选择查询自动给出最高修订号+1,如果找不到结果,则为0。第一部分很简单,例如,如果我有以下数据:

    id | revision | content
    1  | 0        | foo
    1  | 1        | bar
    1  | 2        | bam
    1  | 3        | bang
    

    然后

     select max(revision) + 1 from foo where foo.id = 1
     > 3
    

    当我查询foo.id=2时,是否可以对查询进行简单的调整,使其返回0?

    count(*) 可能是一个选项,但即使我们使用的是只写一次的方案,我也不想依赖于数据库中存在的所有来自0-current_revision的修订。

    1 回复  |  直到 10 年前
        1
  •  1
  •   Gordon Linoff    10 年前

    您正在查找 coalesce() 功能:

    select coalesce(max(revision) + 1, 0)
    from foo
    where foo.id = 1;