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

Consulta anidada complicada...

Estas en el tema de Consulta anidada complicada... en el foro de Mysql en Foros del Web. Bueno. Hola de nuevo. Tengo 4 tablas ( nombres , domicilios , paises , rel_nombres_paises ). Creo que es claro que datos guardan cada tabla. ...
  #1 (permalink)  
Antiguo 30/03/2010, 09:24
 
Fecha de Ingreso: noviembre-2009
Mensajes: 15
Antigüedad: 14 años, 6 meses
Puntos: 0
Consulta anidada complicada...

Bueno. Hola de nuevo.
Tengo 4 tablas (nombres, domicilios, paises, rel_nombres_paises). Creo que es claro que datos guardan cada tabla. La tabla rel_nombres_paises, como su nombre lo indica, relaciona nombres con países.
Quiero hacer una, y solo una, consulta que me muestra los nombres de todas las personas que vivan en, por ejemplo, Argentina.
Aquí hay un código de ejemplo:
Código:
drop table if exists nombres;
drop table if exists domicilios;
drop table if exists paises;
drop table if exists rel_nombres_paises;
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 paises(
 idPaises int(7) auto_increment,
 pais varchar(15),
 primary key(idPaises)
);
create table rel_nombres_paises(
 idRNP int(7) auto_increment,
 relIdNombres int(7),
 relIdPaises int(7),
 primary key(idRNP)
);
insert into nombres(nombre) values('Juan Perez');
insert into domicilios(relIdNombres, domicilio) values(last_insert_id(),'Juanjo Agirre 268');
insert into paises(pais) values('Argentina');
insert into rel_nombres_paises(relIdNombres, relIdPaises) select nombres.idNombres, paises.idPaises from nombres, paises where nombres.nombre = 'Juan Perez' and paises.pais = 'Argentina';

insert into nombres(nombre) values('Juana Aguirre');
insert into domicilios(relIdNombres, domicilio) values(last_insert_id(),'San Martin 588');
insert into paises(pais) values('Colombia');
insert into rel_nombres_paises(relIdNombres, relIdPaises) select nombres.idNombres, paises.idPaises from nombres, paises where nombres.nombre = 'Juana Aguirre' and paises.pais = 'Colombia';

insert into nombres(nombre) values('Marcela Ana');
insert into domicilios(relIdNombres, domicilio) values(last_insert_id(),'Bolivar 776');
insert into paises(pais) values('Venezuela');
insert into rel_nombres_paises(relIdNombres, relIdPaises) select nombres.idNombres, paises.idPaises from nombres, paises where nombres.nombre = 'Marcela Ana' and paises.pais = 'Venezuela';

select * from nombres;
select * from domicilios;
select * from paises;
select * from rel_nombres_paises;
Para ver como funciona, copien y peguen el código en:
http://mysqlya.com.ar/simulador/simulador.php?cod=7&punto=2
Luego, click en Ejecutar comandos SQL
En el final debería incluirse la dichosa consulta.
Intenté repetidas veces hacer una función (con php) que me permita hacerlo, pero no logré.
Lo que pido no es difícil de hacer con mas de una consulta, pero me gustaría aligerar el trámite y realizarlo consultando solo una vez la base de datos.

Desde ya gracias y espero haberme expresado claramente.
  #2 (permalink)  
Antiguo 30/03/2010, 09:45
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta anidada complicada...

Cita:
Quiero hacer una, y solo una, consulta que me muestra los nombres de todas las personas que vivan en, por ejemplo, Argentina.
Código MySQL:
Ver original
  1. n.nombre nombre,
  2. p.pais pais_residencia
  3. nombres n
  4. rel_nombres_paises rnp
  5. rnp.relIdNombres = n.idNombres
  6. paises p
  7. p.idPaises = rnp.relIdPaises
  8. where p.pais = 'Argentina';

así?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 30/03/2010, 21:51
 
Fecha de Ingreso: noviembre-2009
Mensajes: 15
Antigüedad: 14 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Consulta anidada complicada...

Exacto. Me ahorraste horas de auto flagelación.
Muchisimas gracias.!!!

Etiquetas: Ninguno
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:30.