Diferencia entre dos tablas en MySQL

Diferencia entre dos tablas en MySQL

En ocasiones necesitamos comparar dos tablas para encontrar registros en una tabla que no tengan registros coincidentes en la otra.

Seguramente nuestra base de datos nueva tenga un esquema diferente al de la base de datos heredada, y nos encargan transferir todos los datos de la base de datos heredada a la nueva, vamos a asegurarnos de que la transferencia sea exitosa.

Debemos comparar dos tablas, una de la base de datos heredada y otra de la nueva base de datos, y encontrar cualquier registro que no coincida.

Ejemplo: necesitamos comparar las columnas de dos tablas, tabla_1 y tabla_2. Los siguientes pasos comparan dos tablas para encontrar los registros que no coinciden.

  1. Primero, una las filas de ambas tablas usando la instrucción UNION; incluya sólo las columnas necesarias. La comparación se realiza utilizando el conjunto de resultados devuelto.
    SELECT table_1.primary_key, table_1.column_1, table_1.column2
    FROM table_1
    UNION ALL
    SELECT table_2.primary_key, table_2.column_1, table_2.column2
    FROM table_2;
    
  2. Luego, los registros deben agruparse de acuerdo con la clave principal y las columnas que requieren comparación. La función CONTAR(*) produce 2 si los valores de las columnas que deben compararse son similares; en caso contrario, devuelve 1.
    SELECT primary_key, column_1, column_2
    FROM
     (
       SELECT table_1.primary_key, table_1.column_1
       FROM table_1
       UNION ALL
       SELECT table_2.primary_key, table_2.column_1
       FROM table_2
    )  temporary_table
    GROUP BY primary_key, column_1, column_2
    HAVING COUNT(*) = 1
    ORDER BY primary_key
    

El siguiente ejemplo te ayudara a comprender mejor la idea anterior.

SELECT empleado_id, departamento, email
FROM (
    SELECT empleado_id, departamento, email FROM vieja_tabla_empleados
    UNION ALL
    SELECT empleado_id,departamento, email FROM nueva_tabla_empleados
) tabla_temporal
GROUP BY empleado_id, departamento, email
HAVING count(*) = 1
ORDER BY employee_id;

Con el ejemplo anterior comparamos las tablas de empleados antiguo y nuevo, y los resultados se almacenan en una tabla_temporal. Después de la devolución del resultado, estamos agrupando por empleado_id, nombre del departamento e ID de correo electrónico.

Si los valores de las columnas a comparar son idénticos, el método COUNT(*) devuelve 2; en caso contrario, devuelve 1. Por lo tanto, usamos la cláusula HAVING para verificar el valor único.

Finalmente, imprimimos el resultado en orden ascendente empleado_id.

Ejecute la línea de código anterior en cualquier navegador compatible con MySQL. Mostrará el siguiente resultado:

+-------------+--------------------+----------------------+
| empleado_id |     departamento   |         email        |
+-------------+--------------------+----------------------+
| 14          | Marqueting         | john_doe@example.com |
| 15          | TeleComunicaciones | johndoe@example.com  |
+-------------+--------------------+----------------------+
Ahora ya puedes buscar los cambios producidos en una tabla cuando haces una migración con actualizaciones o instalas un plugin en wordpress y quieres ver los cambios producidos en wp_options
  • Categoría de la entrada:Programación