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áusulaWHERE
, pero no hay ninguna fila enB
que coincida con la condiciónON
, se genera una filaB
adicional con todas las columnas establecidas enNULL
.
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;