0

我有一个存储到关系数据库中的版本化对象。条目由整数 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 的所有修订。

4

1 回答 1

1

您正在寻找coalesce()功能:

select coalesce(max(revision) + 1, 0)
from foo
where foo.id = 1;
于 2014-07-11T16:30:07.783 回答