Confrontare due tabelle e trovare le differenze

Discussioni sulle caratteristiche di database
Rispondi
Avatar utente
markinson
Messaggi: 121
Iscritto il: mercoledì 24 giugno 2020, 15:18

Confrontare due tabelle e trovare le differenze

Messaggio da markinson »

Salve a tutti! :)

Eccomi di nuovo qui a chiedere aiuto al Forum, per cercare di risolvere quello che è soltanto l'ultimo ostacolo in ordine di tempo che si è posto di traverso lungo il mio cammino con Base.

Condizione di partenza: ho due differenti versioni di una medesima tabella; tabelle diverse dunque soltanto perché in una delle due sono stati aggiunti e/o modificati e/o cancellati dei record rispetto all'altra, sebbene la struttura sottostante sia perfettamente identica.

Obiettivo: riuscire a confrontare le due edizioni temporali della stessa tabella ed evidenziare in qualche modo le differenze tra di esse.

Precisazione: posso stabilire con certezza quale delle due tabelle è temporalmente più aggiornata.

Sto cercando in rete, ma non credo di essere riuscito nemmeno ad avvicinarmi alla strada verso la soluzione.
In Access si parla di "Query ricerca dati non corrispondenti"; tuttavia non mi sembra questo il caso.

Allego un dbase contenente le due tabelle da confrontare. Nella tabella "tbl_ComuniInGenerale_001" (quella aggiornata più di recente) ho evidenziato il record aggiunto e quello modificato rispetto all'altra tabella "tbl_ComuniInGenerale_000" (tabella non aggiornata).

Grazie, come sempre, per l'attenzione.
Allegati
Comuni da visitare_008_TROVA le DIFFERENZE.odb
(6.37 KiB) Scaricato 229 volte
OpenOffice 4.1.15 / LibreOffice 7 still - Windows 10 Pro x64
"Facesti come quei che va di notte, che porta il lume dietro e sé non giova, ma dopo sé fa le persone dotte"
Dante (Purgatorio, Canto XXII)
Avatar utente
Zago_87
Messaggi: 111
Iscritto il: mercoledì 14 gennaio 2015, 23:53

Re: Confrontare due tabelle e trovare le differenze

Messaggio da Zago_87 »

Ciao, scusa la domanda, probabilmente la risposta è ovvia, ma hai bisogno di questa cosa una volta soltanto o dovrai ripeterla nel tempo?
Perché così su due piedi io utilizzerei i fogli di calcolo se devi fare un controllo singolo.
Se invece è una operazione che devi fare di frequente aggiungere la funzionalità sul DB potrebbe essere molto interessante.

Per la prima opzione ho idee, per la seconda ho mal di testa :knock: o meglio avrei difficoltà a replicare l'idea del foglio di calcolo su DB.

Facci sapere ;)
LibreOffice 6.3.6
Windows 7 PRO
Avatar utente
markinson
Messaggi: 121
Iscritto il: mercoledì 24 giugno 2020, 15:18

Re: Confrontare due tabelle e trovare le differenze

Messaggio da markinson »

Salve carissimo Zago_87! :)

Grazie innanzitutto per la partecipazione al mio ennesimo problema!

Diciamo che l'operazione potrebbe doversi ripetere almeno una volta o due all'anno.
La questione, come c'è stato modo di accennare pure in passato, è la seguente: abbiamo una base di dati oggi che è stata passata all'ufficio cartografie e mappature; i colleghi stanno lavorando su questa base di dati; tuttavia può accadere che, nel corso del tempo (dopo qualche mese in genere, in conseguenza degli aggiornamenti documentali ricevuti), occorra modificare alcuni dati del nostro database. La mappatura rimarrebbe pertanto indietro, rispetto alla base di dati aggiornata.
Mi hanno spiegato che non è fattibile importare ogni volta ex novo l'intera tabella, quindi dovrei essere in grado di segnalare esclusivamente i cambiamenti (in termini di: aggiunte, modifiche, cancellazioni) nel frattempo sopravvenuti.

Anch'io avevo pensato a una lavorazione mediante foglio di calcolo, ma qui potrebbe insorgere il problema delle cancellazioni. Immagina le due basi di dati, entrambi importate in due fogli di calcolo (parliamo comunque di migliaia di record da una parte e dall'altra, con più di 20 campi per riga), dove a un certo punto dalla tabella più aggiornata non solo è stato aggiunto, necessariamente in calce, qualche elemento in più, oppure sono intervenute modifiche in record/righe già esistenti, piuttosto da questa seconda e più aggiornata tabella siano stati rimossi alcuni record/righe. Questo fatto comporterebbe uno "scorrimento verso l'alto" di tutti i seguenti record/righe che, se confrontati passo passo con la prima tabella (la più vecchia), risulterebbero tutti differenti.

Non so se nella mia labirintica esposizione sono riuscito a spiegarmi ... :oops:
OpenOffice 4.1.15 / LibreOffice 7 still - Windows 10 Pro x64
"Facesti come quei che va di notte, che porta il lume dietro e sé non giova, ma dopo sé fa le persone dotte"
Dante (Purgatorio, Canto XXII)
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Confrontare due tabelle e trovare le differenze

Messaggio da Gaetanopr »

Ciao, ti sei spiegato benissimo, si potrebbe fare qualcosa tramite l'uso di una macro ma in ogni caso si potrebbero verificare solo 2 casistiche, record modificato e nuovo record o record cancellato(dipende dl punto di vista), il record cancellato verrebbe identificato pure come nuovo record, per verificare se un record è stato cancellato bisognerebbe confrontare la tabella 000 con una sua versione precedente, se la verifica avviene con la 001 che è quella aggiornata come fai a stabilire se il record che manca nella 000 o che è in più nella 001 sia un nuovo inserimento nella 001 oppure una cancellazione dalla 000? non avendo disposizione lo storico della 000.
In ogni caso avresti a disposizione tutte le variazioni, alla fine credo sia questo quello che conti.
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Avatar utente
Zago_87
Messaggi: 111
Iscritto il: mercoledì 14 gennaio 2015, 23:53

Re: Confrontare due tabelle e trovare le differenze

Messaggio da Zago_87 »

Allora, credo di poter fare la cosa da foglio di calcolo senza particolari problemi, in linea di massima mi è accaduto qualcosa di simile e ne sono uscito vivo.
Su DB, come dice Gaetano, si parla di macro ma direi oltre la mia portata attuale. Se lui è in grado sarò molto felice di apprendere qualcosa di nuovo 8-)

Ma volendo risolvere il problema alla base, non potete lavorare su una tabella unica che il DB prende come sorgente dati esterna e i colleghi consultano direttamente sempre aggiornata? Oppure una macro che esporta ad ogni modifica della suddetta tabella su DB, un file Calc nuovo per loro? Anche qui mi addentro in una cosa che non mi è mai servita, usare Calc come origine, però direi che il vostro problema sia meglio affrontarlo in partenza...che dite? Potrebbe andare?
LibreOffice 6.3.6
Windows 7 PRO
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Confrontare due tabelle e trovare le differenze

Messaggio da Gaetanopr »

Pure io sono del parere di risolvere il problema all'origine, intanto allego esempio dove ho modificato nome al db e alle tabelle per poter scrivere meglio la query, in sostanza la ricerca unisce i campi delle due tabelle e confrontandole restituisce i record modificati e nuovi, il record modificato viene riportato due volte( dopo e prima).
Vedi se può bastare altrimenti si deve lavorare diversamente.
Allegati
Comuni.odb
(6.52 KiB) Scaricato 257 volte
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Avatar utente
markinson
Messaggi: 121
Iscritto il: mercoledì 24 giugno 2020, 15:18

Re: Confrontare due tabelle e trovare le differenze

Messaggio da markinson »

Ragazzi siete, come sempre accade in questo Forum, strepitosi! :super:

Adesso tocca a me, con tutti i miei evidenti limiti, studiare le vostre risposte e i vostri suggerimenti.
Nel senso: temo che dovrò porvi altre domande ...
Gaetanopr ha scritto:... come fai a stabilire se il record che manca nella 000 o che è in più nella 001 sia un nuovo inserimento nella 001 oppure una cancellazione dalla 000? non avendo disposizione lo storico della 000.
La tabella 000 è da considerarsi sempre "congelata", cioè è e sarà sempre la base di partenza. Dunque gli interventi, di qualunque genere, saranno sempre sulla tabella 00n.
Anche perché, una volta aggiornata la 000 con l'ultima tabella, le due tabelle diventeranno uguali e, quindi, la 000 potrà sempre costituire il primo termine di confronto.
Zago_87 ha scritto: Ma volendo risolvere il problema alla base, non potete lavorare su una tabella unica che il DB prende come sorgente dati esterna e i colleghi consultano direttamente sempre aggiornata? ... però direi che il vostro problema sia meglio affrontarlo in partenza...che dite? Potrebbe andare?
Sono assolutamente d'accordo: risolvere/gestire la situazione all'origine (dei dati).
Purtroppo mi è stato risposto che non è possibile lavorare entrambi sulla stessa tabella, come se l'aggiornamento camminasse con Base su un binario e la base di dati sotto la cartografia/mappatura procedesse lungo un altro binario.
La mia proposta/volontà/intenzione era quella di agire tutti su una medesima base di dati; tuttavia pare che ciò non sia realizzabile, almeno per i programmi impiegati nell'altro ufficio.
Gaetanopr ha scritto:... in sostanza la ricerca unisce i campi delle due tabelle e confrontandole restituisce i record modificati e nuovi, il record modificato viene riportato due volte( dopo e prima).
Vedi se può bastare altrimenti si deve lavorare diversamente.
Studierò bene il codice SQL da te scritto. Appena letto mi sono venute in mente cento domande da porti, però credo sia meglio che io tenti di trovare una risposta innanzitutto studiando quello che hai scritto, invece di avere immediatamente la risposta "a pappa pronta".
Ho provato a cancellare un record dalla seconda tabella (quella dove andranno gli aggiornamenti) e correttamente la query mi evidenza l'intervento effettuato. Ottimo!

GRAZIE, a entrambi, siete stati gentilissimi e preziosissimi! :)
OpenOffice 4.1.15 / LibreOffice 7 still - Windows 10 Pro x64
"Facesti come quei che va di notte, che porta il lume dietro e sé non giova, ma dopo sé fa le persone dotte"
Dante (Purgatorio, Canto XXII)
Rispondi