3257_es-ES
Comparando filas para la igualdadTengo 2 tablas de datos con el mismo formato de columna, pero diferentes números de filas. Algunos de los tipos de columna son cadenas y otros son números enteros.
Quiero escribir un script que pase por table_1 una fila a la vez y ver si hay una fila idéntica en table_2 (basada en los elementos de columna en la fila).
¿Tengo que comparar la columna de igualdad elemento por elemento, o hay una manera rápida de comparar toda la fila? Si hay una diferencia, no necesito saber qué fila de table_2 es igual, solo necesito saber si hay una fila con valores iguales.
Gracias,
CuentaRe: Comparación de filas para determinar la igualdadSi quieres evitar tener que recorrer todas las filas de la tabla A y todas las de la tabla B con un bucle doble, puedes añadir una columna a cada una para indicar de qué tabla provienen sus filas (A o
, concatenarlas en una sola y ordenarla por una o dos columnas que contengan los rangos de valores más amplios. Luego, recorre la tabla combinada fila por fila buscando coincidencias entre cada fila y las filas siguientes que tengan valores idénticos en esas columnas. Si encuentras una coincidencia y, además, la columna adicional de esas filas tiene una 'A' en una posición y una 'B' en la otra, entonces (y solo entonces) compara también todas las demás columnas, elemento por elemento. De esta forma, solo necesitarías recorrer la tabla una vez (más algunas comparaciones adicionales si encuentras varias filas casi idénticas), en lugar de tener que hacerlo todo con un bucle doble.
Si existe alguna forma de comparar una fila completa de dos tablas en una sola instrucción, no la conozco, pero al menos lo anterior probablemente acelerará un poco las cosas si se trata de tablas relativamente grandes.Re: Comparación de filas para comprobar la igualdadGracias David,
Me hiciste pensar en un enfoque similar. Para una tabla, creé una cadena para cada fila que contenía todos los elementos de la fila. Luego, inserté la cadena en una lista. De manera similar, creé una cadena para cada fila en la segunda tabla y verifiqué si estaba contenida en la lista.
dtOld = Tabla de datos("oldDelta");
dtNew = Tabla de datos( "Delta" );
nr = N filas(dtOld);
nc = N Cols( dtOld );
oldList = {};
Para (j = 1, j <= nr, j++,
cadena_antigua = "";
Para( k = 1, k <= nc, k++,
oldString = oldString || Char( Column( dtOld, k ) )
);
Insertar en (lista_antigua, cadena_antigua);
);
nr = N filas(dtNew);
Para (j = 1, j <= nr, j++,
nuevaCadena = "";
Para( k = 1, k <= nc, k++,
newString = newString || Char( Column( dtNew, k ) )
);
Si( Contiene( oldList, newString ),
Imprimir(j)
);
);
Mensaje editado por: Bill ERe: Comparación de filas para comprobar la igualdadTambién podrías intentar unir las dos tablas para formar una nueva tabla. La instrucción "where" sería
columna1A = columna1B
y col2A = col2B
y col3A = col3B
etc.
La tabla resultante contendría los duplicados. Sin embargo, resulta bastante tedioso si hay muchas columnas.
Comments
There are no comments yet