Diferencia entre dos tablas en MySQL

Shraddha Paghdar 20 junio 2023
Diferencia entre dos tablas en MySQL

En la publicación de hoy, aprenderemos cómo encontrar la diferencia entre dos tablas en MySQL.

Diferencia entre dos tablas en MySQL

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

Por ejemplo, nuestra nueva base de datos tiene un esquema diferente al de la base de datos heredada. Es nuestra responsabilidad transferir todos los datos de la base de datos heredada a la nueva y asegurarnos de que la transferencia sea exitosa.

Para verificar los datos, 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.

Considere una situación en la que 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
    

Considere el siguiente ejemplo para ayudarlo a comprender mejor la idea anterior.

SELECT employee_id, department, email
FROM (
    SELECT employee_id, department, email FROM employee_old_table
    UNION ALL
    SELECT employee_id,department, email FROM employee_new_table
) temporary_table
GROUP BY employee_id, department, email
HAVING count(*) = 1
ORDER BY employee_id;

El ejemplo anterior compara 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 employee_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 employee_id.

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

+-------------+--------------------+----------------------+
| employee_id |     department     |         email        |
+-------------+--------------------+----------------------+
| 14          | TeleCom            | john_doe@example.com |
| 15          | TeleCommunication  | johndoe@example.com  |
+-------------+--------------------+----------------------+
Shraddha Paghdar avatar Shraddha Paghdar avatar

Shraddha is a JavaScript nerd that utilises it for everything from experimenting to assisting individuals and businesses with day-to-day operations and business growth. She is a writer, chef, and computer programmer. As a senior MEAN/MERN stack developer and project manager with more than 4 years of experience in this sector, she now handles multiple projects. She has been producing technical writing for at least a year and a half. She enjoys coming up with fresh, innovative ideas.

LinkedIn

Artículo relacionado - MySQL Table