Mostrar registros no relacionados de dos tablas MySQL

Mostrar registros no relacionados. Cuando deseamos normalizar una base de datos hay que corregir varios errores para lograr nuestro objetivo. Primeramente, relacionar las tablas, por ejemplo: Facturas y detalles facturas.

Mostrar registros no relacionados de dos tablas MySQL

Al momento de intentar relacionar estas dos tablas suele presentarse errores porque en la tabla detalles de factura suele existir registros huérfanos.

Por tal motivo en este artículo vamos a aprender a encontrar estos registros huérfanos para poder corregirlo y/o eliminarlo. De esta manera una vez corregido el detalle se podrá relacionar dichas tablas.

Además, debemos de buscar registros no relacionados de dos tablas MySQL y/o mostrar registros que no están en otra tabla.

MySQL – Mostrar registros q no están en otra tabla

Existen varias formas para obtener un mismo resultado y a continuación vamos a poner varios ejemplos.

Buscar registros de una tabla que no están en otra (NOT EXISTS)

Debemos de encontrar esos registros solitarios que nos impiden relacionar dos tablas debemos de preparar una consulta acorde a los que necesitamos.

Si la primera condición es cierta, la segunda debe ser falsa, y vice versa. Si cumplimos esos parámetros tendremos resultados, caso contrario la consulta saldrá en blanco.

Para conseguir los registros que no están en otra tabla, puedes usar la cláusula NOT EXISTS

Veamos un ejemplo:

SELECT *
FROM data_base_ct t1
WHERE NOT EXISTS (SELECT NULL
FROM data_inicio_primera_etapa t2
WHERE t2.codigo_ct = t1.codct)

Puedes ejecutar la consulta con el NOT
EXISTS
, pero igual veremos otras consultas equivalentes para comprobarlo.

Usando LEFT JOIN:

La cláusula LEFT JOIN devuelve todos los registros de la tabla izquierda (tabla1) y los registros coincidentes de la tabla derecha (tabla2). El resultado es 0 registros del lado derecho, si no hay coincidencia.

SELECT t1.*
FROM data_base_ct t1
LEFT JOIN data_inicio_primera_etapa t2
ON t2.codigo_ct = t1.codct
WHERE t2.codigo_ct IS NULL

Usando NOT IN:

MySQL NOT IN () se asegura de que la expresión procedente no tenga ninguno de los valores presentes en los argumentos.

SELECT *
FROM data_base_ct
WHERE codct NOT IN (SELECT codigo_ct
FROM data_inicio_primera_etapa)

Primer Ejemplo

Vamos a suponer que tenemos dos tablas, (tabla1 y tabla2) relacionado con el campo ref_codigo. Por lo tanto, se quiere obtener los registros están de la tabla1 y NO en la tabla2. Es decir, mostrar los registros que están la tabla1 y NO están en la tabla2.

Veamos un ejemplo.

select t1.ref_codigo
from table1 t1
where t1.ref_codigo not in ( select ref_codigo
from table2 t2)

Al hacer correr al script obtenemos los registros de la tabla1 q no están en la tabla 2

Segundo ejemplo

Suponiendo que tenemos 02 tablas:

  • Medidores (codi_medi, desc_medi, esta_medi)
  • Lecturas (codi_medi,peri_lect,nmes_lect,lean_lect,leac_lect,esta_lect)

De esas dos tablas se necesitaba obtener la relación de medidores que no tenían una lectura registrada en dicha tabla.

Select * from medidores as m 
where not exists (select * from lecturas as l 
where l.codi_medi=m.codi_medi)

Con esta consulta se pudo obtener los resultados deseados.

Conclusión

En este artículo hemos aprendido a aplicar cláusulas de la base de datos MySQL para obtener registros no relacionado y además para normalizar una base de datos.
Si somos profesionales en el ámbito de sistemas, debemos de saber estas consultas para optimizar bases de datos.
Espero que estas consultas SQL les ayude a normalizar su base de datos o de la empresa donde laboran y/o proyectos web.

Deja un comentario

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

Scroll al inicio