以下で説明するテーブルの組み合わせの問題を解決するには、SQL コードが必要です。
テーブルの古いデータ: テーブルの古い
name version status lastupdate ID
A 0.1 on 6/8/2010 1
B 0.1 on 6/8/2010 2
C 0.1 on 6/8/2010 3
D 0.1 on 6/8/2010 4
E 0.1 on 6/8/2010 5
F 0.1 on 6/8/2010 6
G 0.1 on 6/8/2010 7
テーブルの新しいデータ: テーブルの新しい
name version status lastupdate ID
A 0.1 on 6/18/2010
#B entry deleted
C 0.3 on 6/18/2010 #version_updated
C1 0.1 on 6/18/2010 #new_added
D 0.1 on 6/18/2010
E 0.1 off 6/18/2010 #status_updated
F 0.1 on 6/18/2010
G 0.1 on 6/18/2010
H 0.1 on 6/18/2010 #new_added
H1 0.1 on 6/18/2010 #new_added
新しいデータと古い日付の違い:
B エントリが削除されました
C エントリ バージョンが更新されました
Eエントリー状況を更新しました
C1/H/H1 エントリー 新規追加
私が望むのは、後でデータがどのように変更されても、ID - 名前のマッピング関係を常に古いデータ テーブルに保持することです。別名、名前には常に一意の ID 番号がバインドされています。
エントリが更新された場合はデータを更新し、エントリが新しく追加された場合はテーブルに挿入し、新しく割り当てられた一意の ID を与えます。エントリが削除された場合は、エントリを削除し、後でその ID を再利用しないでください。
ただし、単純な select または update ステートメントでしか SQL を使用できないため、そのようなコードを記述するのは難しすぎる可能性があります。専門知識のある人が方向性を示してくれることを願っています。SQL バリアントの違いに関する詳細は必要ありません。サンプルで十分です。
前もって感謝します!
Rg
KC
======== ここに私の草稿SQLをリストしましたが、それが機能するかどうかはわかりません.専門知識のある誰かがコメントしてください.
1. ストアの更新用に古いテーブルを tmp として複製する
select * from old としてテーブル tmp を作成
2.古いテーブルと新しいテーブルで「名前」が同じであるtmpに更新します
update tmp where name in (新しいものから名前を選択)
3.異なる「名前」(古いものと新しいもの)をtmpに挿入し、新しいIDを割り当てます
insert into tmp (name version status lastupdate ID) set idvar = max(select max(id) from tmp) + 1 select * from (select new.name new.version new.status new.lastupdate new.ID from old, new where old.name <> new.name)
4. 削除されたエントリを tmp テーブルから削除します (B など)。
tmp から削除 (??? を選択)