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
, pero igual veremos otras consultas equivalentes para comprobarlo.
EXISTS
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.