Ho due tabelle cronologia che tengono traccia delle modifiche nei valori del database, utilizzando un ID revisione per tenere traccia delle singole modifiche. per esempio.Unione di due tabelle di rilevamento versione durante il riempimento dei valori
Tabella 1:
rev | A | B
=================
1 | 100 | 'A'
4 | 150 | 'A'
7 | 100 | 'Z'
Tabella 2:
rev | C | D
==================
1 | 200 | True
5 | 0 | True
8 | 0 | False
L'obiettivo è quello di unire le due tabelle in:
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
L'idea è che per un determinato revisione, prenderei i valori corrispondenti a quella revisione o la revisione più alta meno di essa.
La query SQL che viene in mente sarebbe qualcosa di simile ad attraversare congiungente i due tavoli con vincolo rev1 < rev2, quindi selezionando righe utilizzando una subquery dove rev1 = max (REV1) per ogni dato rev2 ; unione di questa query con la sua controparte scambiando rev2 e rev1; e infine filtrare i duplicati da dove rev1 = rev2.
Le domande sono:
- C'è un nome per questo tipo di join?
- Esiste un idioma per eseguire questo tipo di join in SQL, o sarebbe meglio farlo a livello di codice (che sarebbe sicuramente molto più semplice ed eventualmente più efficiente)?
Cosa RDBMS? Alcuni hanno il supporto per questi tipi di operazioni, quindi (specialmente se lo spazio dati è grande) questo potrebbe effettivamente essere più efficiente nel database. –
Quindi non vuoi la query ma solo la risposta a queste due domande? –
Il database è PostgreSQL, anche se tecnicamente il lavoro dovrebbe essere indipendente dal DB (realisticamente questo non accadrà). E sì, sono solo interessato alle risposte alle domande, a meno che non ci sia una domanda molto più semplice a cui sto trascurando. –