Quantcast
Channel: Como comparar dos filas de diferentes tablas y obtener registros que cumplan condición, si no, mostrar null MySQL? - Stack Overflow en español
Viewing all articles
Browse latest Browse all 2

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

$
0
0

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 filaB 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_nomFROM persona p    LEFT JOIN ciudad c    ON p.ciudad_id=c.ciudad_id;

Resultado

 persona_nom    ciudad_nom1 Pedro         Galilea2 Santiago      Betsaida3 Juan          Patmos4 María         Magdala5 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');-- CONSULTASELECT     p.persona_nom,    c.ciudad_nomFROM persona p    LEFT JOIN ciudad c    ON p.ciudad_id=c.ciudad_id;

Viewing all articles
Browse latest Browse all 2

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>