Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/03/2010, 16:02
Dago1988
 
Fecha de Ingreso: noviembre-2009
Mensajes: 15
Antigüedad: 14 años, 5 meses
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.