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(*)オプションになりますが、書き込みのみのスキームを使用している場合でも、DB に存在する 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 に答える