3257_it-IT
Confronto di righe per l'uguaglianzaHo 2 tabelle di dati con lo stesso formato di colonna, ma diversi numeri di righe. Alcuni dei tipi di colonna sono stringhe e altri sono numeri interi.
Voglio scrivere uno script che passi attraverso table_1 una riga alla volta e vedere se c'è una riga identica in table_2 (basata sugli elementi della colonna nella riga).
Devo confrontare per colonna di uguaglianza elemento per elemento, o c'è un modo rapido per confrontare l'intera riga? Se fa la differenza, non ho bisogno di sapere quale riga table_2 è uguale, ho solo bisogno di sapere se c'è una riga con valori uguali.
Grazie,
ContoRe: Confronto di righe per uguaglianzaSe si desidera evitare di dover eseguire un doppio ciclo su tutte le righe della tabella A rispetto a tutte le righe della tabella B, è possibile aggiungere una colonna extra a ciascuna tabella, per indicare da quale tabella provengono tutte le righe (ad esempio, "A" o "B"), concatenare le due tabelle in un'unica tabella e quindi ordinare la tabella combinata in base a una o due colonne che contengono gli intervalli di valori più ampi. Quindi, scorrere la tabella combinata riga per riga alla ricerca di eventuali corrispondenze tra ciascuna riga e tutte le righe successive che contengono valori identici in quelle una o due colonne. Se si ottiene una corrispondenza in qualsiasi punto, ma si scopre anche che la colonna extra di quelle righe ha una "A" in una posizione e una "B" nell'altra, allora (e solo allora) confrontare anche tutte le altre colonne, elemento per elemento. In questo modo, sarà sufficiente eseguire la ricerca nella tabella con un solo passaggio (più alcuni confronti extra se si trovano diverse righe quasi identiche), anziché dover eseguire l'intera operazione con un doppio ciclo.
Se esiste un modo per confrontare un'intera riga di due tabelle in una singola istruzione, non so quale sia, ma almeno quanto detto sopra dovrebbe probabilmente velocizzare un po' le cose se si hanno a che fare con tabelle relativamente grandi.Oggetto: Confronto tra righe per verificarne l'uguaglianzaGrazie David,
Mi hai fatto pensare a un approccio simile. Per una tabella ho creato una stringa per ogni riga, composta da tutti gli elementi della riga stessa. Ho poi inserito la stringa in una lista. Allo stesso modo, ho creato una stringa per ogni riga della seconda tabella e ho verificato se fosse presente nella lista.
dtOld = Tabella dati( "oldDelta" );
dtNew = Tabella dati( "Delta" );
nr = N righe( dtOld );
nc = N Cols( dtOld );
oldList = {};
Per( j = 1, j <= nr, j++,
vecchiaStringa = "";
Per( k = 1, k <= nc, k++,
oldString = oldString || Char( Colonna( dtOld, k ) )
);
Inserisci in ( oldList, oldString );
);
nr = N righe( dtNew );
Per( j = 1, j <= nr, j++,
nuovaStringa = "";
Per( k = 1, k <= nc, k++,
nuovaStringa = nuovaStringa || Carattere( Colonna( dtNew, k ) )
);
Se( Contiene( vecchiaLista, nuovaStringa ),
Stampa( j )
);
);
Messaggio modificato da: Bill EOggetto: Confronto tra righe per verificarne l'uguaglianzaPotresti anche provare a unire le due tabelle per formarne una nuova. L'istruzione "where" sarebbe
col1A = col1B
e col2A = col2B
e col3A = col3B
ecc.
La tabella risultante conterrebbe i duplicati. Un procedimento piuttosto noioso se le colonne sono numerose.