Registros diferentes entre dos tablas MySQL

Registros diferentes entre dos tablas MySQL

Registros diferentes entre dos tablas. Si deseamos encontrar los filas diferentes entre dos tablas en MySQL, es decir si hay una columna en la tabla 2 que estaba vinculada a la columna de ID de la tabla 1. Sin embargo, entre esas dos tablas queremos filtrar los registros diferentes.

En este artículo explicaremos estrategias y consultas para obtener el resultado deseado.

Estructuras de las tablas.

Table 1          table 2

ID | name      ID | value (Este es el ID de la tabla 1) 
1  | uno       1  | 1
2  | dos       2  | 2
3  | tres      3  | 4
6  | seis      4  | 4
7  | siete     5  | 5
               6  | 5
               7  | 6
               8  | 7
               9  | 1
               10 | 1

Si observamos la tabla 2, varios ID de la tabla 1 están en varias filas y la idea es obtener todas las que no están presentes en la tabla 1 como resultado de la consulta SQL.

La idea es obtener el siguiente resultado en una consulta.

Resultado (Registros diferentes)

ID (form table 2) | value
 3                | 4
 4                | 4
 5                | 5
 6                | 5

¿Cómo hacer una consulta que devolverá los registros diferentes?

A continuación, veremos varias formas para lograr nuestro objetivo, entre ellas veremos sentencias en las consultas.

Registros diferentes entre dos tablas MySQL

Podemos usar dos opciones para lograr el objetivo y estos son:

Primer forma: Usando NOT EXISTS

Los operadores “exists” y “not exists” se emplean para determinar si hay o no datos en una lista de valores (Tabla MySQL).

Podemos usar estos operadores en subconsultas correlacionadas para restringir el resultado de una consulta exterior a los registros que cumplen la subconsulta (consulta interior). Veamos un ejemplo de uso.

select * 
from table2 A
Where Not exists (select 1 from table1 B Where A.ID = B.value)

Segunda forma: Usando LEFT OUTER JOIN

La sentencia LEFT OUTER JOIN permite realizar lecturas con uniones de tablas que excluyen de las condiciones de intersección la tabla indicada en la parte izquierda. Veamos el ejemplo completo.

select *
from table2 A 
LEFT OUTER JOIN table1 B 
on A.ID = B.value
Where B.value IS NULL

Usando NOT IN

Por ejemplo, si tenemos dos tablas (test1, test2) con los campos “Factura” y “Monto” en cada una, necesito crear una consulta que me devuelva únicamente los registros que se encuentren en Test1 pero que no estén en Test2. Veamos la consulta SQL:

SELECT Factura, Monto 
FROM Test1 
WHERE Factura NOT IN (SELECT Factura from Test2) 
AND Monto NOT IN (SELECT Monto from Test2)

Otro ejemplo mas simple

select * from table_B where IMEI not in(Select IMEI from table_A)

Si lo que deseamos son valores diferentes de ese campo únicamente, un NOT IN o NOT EXISTS debería darnos resultados deseados:

SELECT t1.Descripcion, t1.Marca, t1.Modelo
FROM Articulos1 as t1
WHERE NOT EXISTS (SELECT 1 FROM Articulos2 as t2 WHERE t1.CodArt = t2.CodArt)

Conclusión

En este artículo hemos aprendido a verificar la existencia de registros diferentes entre dos tablas de MySQL. Por lo tanto, el hecho de verificar registros diferentes ya podríamos optimizar nuestras tablas y es más podríamos crear relaciones de tablas a través de una llave foránea.

Si no queremos tener registros basuras en nuestras tablas es recomendable relacionar tablas con el ID primario y la llave foránea, con esta relación de tablas los registros serán más precisos.

Espero que esta breve explicación les ayude en sus proyectos web.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *