Como comparar dos filas de diferentes tablas y obtener registros que cumplan condición, si no, mostrar null MySQL?

publicado por: Anonymous

Tengo dos tablas con los mismos campos, pero cada usuario inserta diferentes registros (existe un rango de 78 posibles registros que pueden insertar cada usuario en su tabla) lo que deseo poder hacer es obtener en que campos son similares los registros y en cuales no lo son (ya que existe la posibilidad de que sean similares o no los registros insertados en las tablas de los 2 usuarios)

Quiero obtener una fila que muestre en que campos son iguales los registros de las dos tablas de los dos usuarios, cuando son iguales mostrar los registros iguales y cuando no, solo mostrar un NULL.

Intenté esto en MySQL 5.7:

SELECT * FROM TablaA as A
FULL OUTER JOIN TablaB as B
ON (A.Col1 = B.Col1 and A.Col2 = B.Col2)

solución

A ver si te lo explico con código.

En una consulta que junte varias tablas, si quieres traer las columnas que no tengan datos en alguna de las coincidencias, puedes usar LEFT JOIN.

Una de las cosas que ocurren cuando se usa LEFT JOIN es la siguiente:

Si hay una fila en A que coincide con la cláusula WHERE, pero no hay
ninguna fila en B que coincida con la condición ON, se genera una fila
B adicional con todas las columnas establecidas en NULL.

Para más detalles, ver la documentación de MySQL.

En el código siguiente, supongamos que tu tabla A es una tabla de personas y tu tabla B es una tabla de ciudades y quieres mostrar las ciudades de nacimiento de cada persona, sin dejar de mostrar aquellas que no tienen ninguna ciudad de nacimiento indicada, la consulta sería algo como esto:

Consulta

SELECT 
    p.persona_nom,
    c.ciudad_nom
FROM persona p
    LEFT JOIN ciudad c
    ON p.ciudad_id=c.ciudad_id;

Resultado

 persona_nom    ciudad_nom
1 Pedro         Galilea
2 Santiago      Betsaida
3 Juan          Patmos
4 María         Magdala
5 Sin Ciudad    NULL

Ejemplo completo: ver demo

/*
-- ATENCIÓN NO USE DROP TABLE CON SUS TABLAS REALES
-- YA QUE DROP TABLE BORRARÁ SUS DATOS
-- DROP TABLE SE USA AQUÍ SÓLO PARA PODER PROBAR LOS DATOS */ 

DROP TABLE IF EXISTS ciudad;
DROP TABLE IF EXISTS persona;

/* NO COPIE LA SENTENCIA ^ DROP TABLE ^ EN SUS DATOS REALES */


CREATE TABLE IF NOT EXISTS persona
    (`persona_id` serial, 
     `persona_nom` varchar(50), 
     `ciudad_id` int
     );

INSERT INTO persona
    (`persona_nom`, `ciudad_id`)
VALUES
    ('Pedro', 1),
    ('Santiago', 2),
    ('Juan', 3),
    ('María',4),
    ('Sin Ciudad',NULL)
;

CREATE TABLE ciudad
    (`ciudad_id` int, 
     `ciudad_nom` varchar(50)
    );

INSERT INTO ciudad
    (`ciudad_id`, `ciudad_nom`)
VALUES
    (1, 'Galilea'),
    (2, 'Betsaida'),
    (3, 'Patmos'),
    (4, 'Magdala')


;

-- CONSULTA

SELECT 
    p.persona_nom,
    c.ciudad_nom
FROM persona p
    LEFT JOIN ciudad c
    ON p.ciudad_id=c.ciudad_id;
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *