sql >> Base de Datos >  >> RDS >> Mysql

Cómo comparar dos tablas en MySQL

A veces, es posible que necesite comparar dos tablas en MySQL para encontrar registros coincidentes o registros no coincidentes. Aquí está la consulta SQL para comparar dos tablas en MySQL.

Cómo comparar dos tablas en MySQL

Estos son los pasos para comparar dos tablas en MySQL. Hay diferentes casos de uso para comparar dos tablas en SQL. Veremos cada uno de ellos uno por uno. Supongamos que tiene las siguientes 2 tablas pedidos (id, order_date, cantidad) y pedidos2(id, order_date, cantidad) que tienen 2 registros idénticos.

mysql> create table orders(id int, order_date date, amount int);

mysql> insert into orders(id, order_date, amount)
     values(1,'2020-07-25',250),
     (2,'2020-07-26',350),
     (3,'2020-07-27',200),
     (4,'2020-07-28',150);

mysql> select * from orders;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    1 | 2020-07-25 |    250 |
|    2 | 2020-07-26 |    350 |
|    3 | 2020-07-27 |    200 |
|    4 | 2020-07-28 |    150 |
+------+------------+--------+

mysql> create table orders2(id int, order_date date, amount int);

mysql> insert into orders2(id, order_date, amount)
     values(3,'2020-07-27',200),
     (4,'2020-07-28',150),
     (5,'2020-07-29',250),
     (6,'2020-07-30',300);

mysql> select * from orders2;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    3 | 2020-07-27 |    200 |
|    4 | 2020-07-28 |    150 |
|    5 | 2020-07-29 |    250 |
|    6 | 2020-07-30 |    300 |
+------+------------+--------+

Lectura adicional:Cómo obtener los datos del último mes en MySQL

MySQL compara dos columnas de diferentes tablas

Digamos que solo desea comparar dos columnas (por ejemplo, id) de dos tablas diferentes pedidos y pedidos2. Aquí está la consulta SQL para comparar dos columnas de diferentes tablas y seleccionar registros que coincidan.

mysql> select * from orders
       where id in
       (select id from orders2);
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    3 | 2020-07-27 |    200 |
|    4 | 2020-07-28 |    150 |
+------+------------+--------+

En la consulta anterior, seleccionamos registros de pedidos cuyo id el valor de la columna está presente en la lista de id valores de columna obtenidos de orders2 usando una subconsulta.

De manera similar, si desea comparar dos columnas y seleccionar registros que no coinciden, actualice la consulta anterior agregando una palabra clave NOT antes de IN, como se muestra a continuación.

mysql> select * from orders
            where id NOT in
            (select id from orders2);
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    1 | 2020-07-25 |    250 |
|    2 | 2020-07-26 |    350 |
+------+------------+--------+

Lectura adicional:Cómo copiar una tabla en MySQL

MySQL Compare dos tablas para encontrar registros coincidentes

Si está buscando comparar dos tablas y encontrar registros coincidentes basados ​​en múltiples columnas, aquí está la consulta SQL. Supongamos que desea encontrar registros idénticos comparando varias columnas id, order_date, cantidad

Primero hacemos una UNIÓN de TODAS las dos tablas para retener las filas duplicadas.

mysql> select id, order_date, amount
     from orders
     union all
     select id, order_date, amount
     from orders2;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    1 | 2020-07-25 |    250 |
|    2 | 2020-07-26 |    350 |
|    3 | 2020-07-27 |    200 |
|    4 | 2020-07-28 |    150 |
|    3 | 2020-07-27 |    200 |
|    4 | 2020-07-28 |    150 |
|    5 | 2020-07-29 |    250 |
|    6 | 2020-07-30 |    300 |
+------+------------+--------+

A continuación, hacemos un AGRUPAMIENTO POR para contar registros por id, order_date y cantidad columnas para encontrar registros con recuento> 1, es decir, registros que ocurren más de una vez. Usamos la consulta anterior como subconsulta.

mysql> select id, order_date, amount
       from (
           select id, order_date, amount
           from orders
           union all
           select id, order_date, amount
           from orders2)
       temp
       group by id, order_date, amount
       having count(*)>1;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    3 | 2020-07-27 |    200 |
|    4 | 2020-07-28 |    150 |
+------+------------+--------+

Lectura adicional:Cómo agregar la restricción NOT NULL en MySQL

MySQL Compare dos tablas para encontrar registros no coincidentes

Del mismo modo, aquí se explica cómo comparar dos tablas para encontrar columnas no coincidentes en MySQL. En la consulta anterior, en lugar de usar count(*)>1, usamos la condición count(*)=1, es decir, registros que ocurren solo una vez.

Aquí está el SQL para comparar dos tablas y encontrar registros sin coincidencias.

mysql> select id, order_date, amount
       from (
         select id, order_date, amount
         from orders
         union all
         select id, order_date, amount
         from orders2)
       temp
       group by id, order_date, amount
      having count(*)=1;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    1 | 2020-07-25 |    250 |
|    2 | 2020-07-26 |    350 |
|    5 | 2020-07-29 |    250 |
|    6 | 2020-07-30 |    300 |
+------+------------+--------+

Lectura adicional:Cómo agregar restricciones predeterminadas en MySQL

MySQL compara dos tablas de diferentes bases de datos

De manera similar, si desea comparar dos tablas orders y orders2 de diferentes bases de datos db1 y db2 respectivamente, simplemente prefije los nombres de las bases de datos antes de los nombres de las tablas con un punto (.)

Aquí está la consulta SQL para comparar dos tablas de diferentes bases de datos y obtener registros coincidentes.

mysql> select id, order_date, amount
       from (
           select id, order_date, amount
           from db1.orders
           union all
           select id, order_date, amount
           from db2.orders2)
       temp
       group by id, order_date, amount
       having count(*)>1;

Y aquí está la consulta SQL para comparar dos tablas de diferentes bases de datos y obtener registros sin igual.

mysql> select id, order_date, amount
       from (
           select id, order_date, amount
           from db1.orders
           union all
           select id, order_date, amount
           from db2.orders2)
       temp
       group by id, order_date, amount
       having count(*)>1;

Con suerte, ahora puedes comparar dos tablas en MySQL

Ubiq facilita la visualización de datos en minutos y la supervisión en paneles en tiempo real. ¡Pruébalo hoy!