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

时间:2014-07-11 16:20:47

标签: sql sqlite revision-history

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

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

如果修订版本已存在,我想使用select查询自动提供最高版本号+ 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 个答案:

答案 0 :(得分:1)

您正在寻找coalesce()功能:

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