Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

problema al realizar una consulta con inner join y 3 tablas

Estas en el tema de problema al realizar una consulta con inner join y 3 tablas en el foro de Mysql en Foros del Web. Bueno. Primeramente quiero decirles que lo poco que conozco de php y mysql, es gracias a estos foros y páginas similares. Así que soy un ...
  #1 (permalink)  
Antiguo 27/03/2010, 17:02
 
Fecha de Ingreso: noviembre-2009
Mensajes: 15
Antigüedad: 10 años, 1 mes
Puntos: 0
problema al realizar una consulta con inner join y 3 tablas

Bueno. Primeramente quiero decirles que lo poco que conozco de php y mysql, es gracias a estos foros y páginas similares. Así que soy un amateur en estos temas. Por eso recurro a la ayuda de expertos y no tanto.

Paso a explicar el problema:
Tengo 3 tablas en mi base de datos mysql. Estas son nombres, domicilios, teléfonos. Estas últimas se relacionan con nombres a través del campo relIdNombres, presente en ambas.
Cada vez que se registra un nuevo nombre (en la tabla nombres, valga la redundancia), también se crea un registro en la tabla domicilios. Pero en la tabla teléfonos la cosa es diferente, ya que pudiera haber algunas personas que no tuviesen teléfono.
El problema surge al intentar hacer una consulta con inner join que "junte" las 3 tablas. Solo se muestran aquellos nombres que tengan domicilio y teléfono, dejando de lado aquellos que solo tienen teléfono.

Les dejo el código mysql para que entiendan de que les hablo.
Código:
drop table if exists nombres;
drop table if exists domicilios;
drop table if exists telefonos;
create table nombres(
 idNombres int(7) auto_increment,
 nombre varchar(30),
 primary key(idNombres)
);
create table domicilios(
 idDomicilios int(7) auto_increment,
 relIdNombres int(7),
 domicilio varchar(30),
 primary key(idDomicilios)
);
create table telefonos(
 idTelefonos int(7) auto_increment,
 relIdNombres int(7),
 telefono varchar(15),
 primary key(idTelefonos)
);
insert into nombres(nombre) values('Juan Perez');
insert into domicilios(relIdNombres, domicilio) values(last_insert_id(),'Juanjo Agirre 268');
insert into telefonos(relIdNombres, telefono) select idNombres,'468523' from nombres where nombre = 'Juan Perez';
insert into nombres(nombre) values('Carla Diaz');
insert into domicilios(relIdNombres, domicilio) values(last_insert_id(),'Calla Aguero 268');
insert into telefonos(relIdNombres, telefono) select idNombres,'468523' from nombres where nombre = 'Carla Diaz';
insert into nombres(nombre) values('Franco Macri');
insert into domicilios(relIdNombres, domicilio) values(last_insert_id(),'Garca Avenida 268');

select * from nombres;
select * from domicilios;
select * from telefonos;

select A.idNombres, A.nombre, B.domicilio, C.telefono from nombres A inner join domicilios B on A.idNombres = B.relIdNombres inner join telefonos C on C.relIdNombres = A.idNombres;
Pueden copiar y pegar el código aquí para ver lo que sucede:
http://mysqlya.com.ar/problemas/problema.php?cod=3&punto=3
Como verán, no aparece el último registro (aquel que no se incluye en la tabla telefono). Esto es un problema. Ya que para minimizar las consultas a mi base de datos me gustaría obtener todo lo que necesito de una vez, y no tener que realizar una nueva consulta para obtener los teléfonos.
Sin mencionar que, si nadie tiene telefonos, la consulta da un resultado vacío (0 filas)

Obviamente, este no es el uso real que quiero hacer de esta consulta, pero sirve de ejemplo. Desde ya, gracias por la ayuda que, los usuarios de esta excelente comunidad, puedan brindarme.
  #2 (permalink)  
Antiguo 27/03/2010, 18:31
 
Fecha de Ingreso: julio-2009
Mensajes: 90
Antigüedad: 10 años, 4 meses
Puntos: 4
Respuesta: problema al realizar una consulta con inner join y 3 tablas

Hola, no sé mucho pero he aprendido un montón en este foro y creo que puedo ayudarte con mi granito de arena:

debes cambiar tu inner join de la tabla telefonos por left join y te dara todos los resultados.


LEFT JOIN retorna los registros de la primera tabla aunque no coincidan con ninguno de la otra.

RIGHT JOIN realiza lo mismo pero en base a la segunda tabla.


Me cuesta a veces comprender lo de los join pero esta pagina me ayuda a recordar como funcionan:

http://www.programacionweb.net/artic...iculo/?num=467
  #3 (permalink)  
Antiguo 28/03/2010, 23:10
 
Fecha de Ingreso: noviembre-2009
Mensajes: 15
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: problema al realizar una consulta con inner join y 3 tablas

Excelente. Era exactamente eso los que necesitaba. Gracias tokkaido, por la rápida ayuda.
Saludos

Etiquetas: join, realizar, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:55.