私は、リビジョンIDを使用して個々の変更を追跡するデータベース値の変更を追跡する2つの履歴テーブルを持っています。例えば値を入力中に2つのバージョントラッキングテーブルをマージする
表1:
rev | A | B
=================
1 | 100 | 'A'
4 | 150 | 'A'
7 | 100 | 'Z'
表2:
rev | C | D
==================
1 | 200 | True
5 | 0 | True
8 | 0 | False
目標はに2つのテーブルをマージすることであろう。
rev | A | B | C | D
===============================
1 | 100 | 'A' | 200 | True
4 | 150 | 'A' | 200 | True
5 | 150 | 'A' | 0 | True
7 | 100 | 'Z' | 0 | True
8 | 100 | 'Z' | 0 | False
所与のためのそれであるという考えをそのリビジョンに対応する値、またはそれよりも小さいリビジョンを取ることにしました。
頭に浮かぶSQLクエリは、それぞれのREV1 = MAX(REV1)はREV2を与えられたサブクエリを使用して行を選択し、制約のrev1 rev2の <で2つのテーブルを結合交差に似ものになるだろう;このクエリをその相手と交換することで結合するrev2およびrev1;最後に、rev1 = rev2から重複を除外します。
質問は以下のとおりです。
- 参加のこのタイプの名前はありますか?
- SQLでこのタイプの結合を実行するためのイディオムがありますか、それともプログラマチックに行う方が良いでしょうか(これは間違いなくより簡単で効率的です)。
?これらのタイプの操作がサポートされているものもあります(特に、データスペースが大きい場合は、実際にはデータベースで効率的です)。 –
質問はしたくないのですが、その2つの質問に対する答えだけです。 –
データベースはPostgreSQLですが、技術的にはDBとは独立しているはずです(現実的にはこれは起こりません)。そして、私が見落としているクエリがはるかに単純でない限り、質問に対する答えに興味があります。 –