Mostrar registros no relacionados de dos tablas MySQL

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.

Índice

    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 una respuesta

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

    Subir