Mam dwie tabele historii, które śledzą zmiany w wartościach bazy danych, używając identyfikatora wersji do śledzenia poszczególnych zmian. na przykładScalanie dwóch tabel śledzenia wersji podczas wypełniania wartości
Tabela 1:
rev | A | B
=================
1 | 100 | 'A'
4 | 150 | 'A'
7 | 100 | 'Z'
Tabela 2:
rev | C | D
==================
1 | 200 | True
5 | 0 | True
8 | 0 | False
Celem będzie połączenie tych dwóch tabel w:
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
Pogląd, że dla danego rewizję, wziąłbym wartości odpowiadające tej rewizji lub najwyższą rewizję mniejszą od niej.
Kwerenda SQL, która przychodzi do głowy, byłoby coś podobnego do przekroczenia łącząca dwie tabele z więzów rev1 < rev2, a następnie wybierając wiersze za pomocą podzapytania gdzie rev1 = max (rev1) dla każdego podanego Rev2 ; zjednoczenie tego zapytania z jego odpowiednikiem wymieniającym i rev1 ; i wreszcie odfiltrowanie duplikatów z miejsca, gdzie rev1 = rev2.
Pytania są:
- Czy jest nazwa dla tego typu przyłączyć?
- Czy istnieje idiom do wykonywania tego typu sprzężenia w SQL, czy byłoby lepiej zrobić to programowo (co z pewnością byłoby znacznie prostsze i być może bardziej wydajne)?
Co RDBMS? Niektóre mają wsparcie dla tego typu operacji, więc (szczególnie jeśli przestrzeń danych jest duża) może to być bardziej wydajne w bazie danych. –
Więc nie chcesz zapytania, ale tylko odpowiedzi na te dwa pytania? –
Baza danych to PostgreSQL, choć pod względem technicznym praca ma być niezależna od DB (realistycznie to się nie stanie). I tak, po prostu interesują mnie odpowiedzi na pytania, chyba że jest znacznie prostsze pytanie, które przeoczyłem. –