我有兩個歷史表跟蹤數據庫值的更改,使用版本ID跟蹤各個更改。例如在填寫值時合併兩個版本跟蹤表
表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
我們的目標是將兩個表合併成:
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連接兩個表<轉2,然後使用子查詢,其中給出轉2REV1 = MAX(REV1)每個選擇行;將該查詢與其對應的交換rev2和rev1;最後過濾掉rev1 = rev2的重複項。
的問題是:
- 是否有這種類型的連接的名稱?
- 在SQL中執行這種類型的連接有沒有一個習慣用法,還是以編程方式執行它會更好?(這肯定會更簡單和可能更有效)?
RDBMS是什麼?有些支持這些類型的操作,所以(特別是在數據空間很大的情況下),這在數據庫中實際上可能更有效。 –
所以你不想要查詢,而只是這兩個問題的答案? –
數據庫是PostgreSQL,儘管技術上這項工作應該獨立於數據庫(實際上這不會發生)。是的,只是對問題的答案感興趣,除非我忽略了一個更簡單的查詢。 –