Foros del Web » Programando para Internet » ASP Clásico »

Sql compleja

Estas en el tema de Sql compleja en el foro de ASP Clásico en Foros del Web. Buenas noches.- Tengo las siguientes tablas.- PROVINCIAS IdProvincia nombreProvincia LOCALIDADES IdLocalidad IdProvincia nombreLocalidad RESIDENCIASPRIVADAS nombreResidenciaPrivada IdLocalidad IdProvincia RESIDENCIAS PUBLICAS nombreResidenciaPublica IdLocalidad IdProvincia ¿Deseo obtener el ...
  #1 (permalink)  
Antiguo 24/01/2006, 12:25
 
Fecha de Ingreso: marzo-2004
Mensajes: 174
Antigüedad: 20 años, 2 meses
Puntos: 1
Sql compleja

Buenas noches.-

Tengo las siguientes tablas.-

PROVINCIAS
IdProvincia
nombreProvincia

LOCALIDADES
IdLocalidad
IdProvincia
nombreLocalidad

RESIDENCIASPRIVADAS
nombreResidenciaPrivada
IdLocalidad
IdProvincia

RESIDENCIAS PUBLICAS
nombreResidenciaPublica
IdLocalidad
IdProvincia

¿Deseo obtener el listado alfábetico de todas aquellas localidades de por ejemplo la IdProvincia=20 que tengan una residencia privada ó una residencia pública?

Parece muy fácil, pero he hecho miles de combinaciones y no me las saca.

Gracias
  #2 (permalink)  
Antiguo 24/01/2006, 13:31
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 5 meses
Puntos: 7
¿Y no te sería mas facil hacer una tabla llamada RESIDENCIAS con un campo llamado IDTIPO que apunte a una tabla llamada TIPOS con los campos ID y NOMBRETIPO el cual contendría (por ej.) valores como PUBLICO y PRIVADO?



Un saludo

Última edición por tammander; 24/01/2006 a las 13:50
  #3 (permalink)  
Antiguo 24/01/2006, 20:56
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Estoy totalmente de acuerdo con tammander, mas bien el problema aqui es la estructura de tu base de datos, creo que deberias comenzar por normalizar...

No entiendo mucho pero por lo poco que veo:

"Una provincia, tiene muchas localidades"
"Una localidad corresponde a una provincia"
:.
Relacion = uno a muchos

tbl_provincia
provincia_id
provincia_nombre

tbl_localidad
localidad_id
provincia_id
localidad_nombre

Hasta ahi estamos bien...ahora

"Una localidad tiene muchas residencias"
"Una residencia, esta en una sola localidad"
:.
Relacion: Uno a muchos nuevamente

tbl_residencia
residencia_id
localidad_id
residencia_nombre
residencia_es_privada->Si no es privada es publica verdad(0/1)? esta es una propiedad de la residencia, asi que un campo dentro de la misma entidad es correcto.

Código:
SELECT a.residencia_id, a.residencia_nombre, b.localidad_nombre FROM tbl_residencia a INNER JOIN tbl_localidad b ON a.localidad_id = b.localidad_id WHERE a.localidad_id = 20
Algo asi.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #4 (permalink)  
Antiguo 24/01/2006, 21:09
 
Fecha de Ingreso: noviembre-2005
Ubicación: venezulea
Mensajes: 214
Antigüedad: 18 años, 6 meses
Puntos: 0
me parece excelente lo de la tabla residencia propuesta por u_goldman, y tambien la idea de usar inner join me parece que es lo más optimo. Más sinembargo no veo que la consulta una vez armada cumpla con lo solicitado. Disculpa mi ignorancia
  #5 (permalink)  
Antiguo 24/01/2006, 22:08
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Ah cierto, me confundi, bueno, la estructura esta propuesta, ya nada mas faltaria armar el query.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #6 (permalink)  
Antiguo 25/01/2006, 02:46
 
Fecha de Ingreso: marzo-2004
Mensajes: 174
Antigüedad: 20 años, 2 meses
Puntos: 1
Seria una locura unificar las tablas de PRIVADAS y PUBLICAS en una sola, porque la de PRIVADAS tiene muchos más campos que la de PUBLICAS aparte de otras características. La normalización aquí no tiene lugar.

De todos modos estoy convencido que tiene que funcionar, si es que es tan fácil metodologicamente hablando de hacer que me sorprenda que no me salga, la idea básica es.-

select localidad from TLOCALIDAD where IdLocalidad in
(select IdLocalidad from PRIVADAS
Union
select IdLocalidad from PUBLICAS)

pero el Union no me funciona cuando ataco una bd en MySQL (en ACCESS si), debe haber alguna alternativa en MySQL al Union.

Seguiré buscando, de todos modos cualquier idea que se os ocurra será bienvenida.

Gracias
  #7 (permalink)  
Antiguo 25/01/2006, 13:08
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
A ver prueba asi:

select a.idlocalidad from TLOCALIDAD a where a.IdLocalidad in
(select nombreResidencia from PRIVADAS WHERE idLocalidad = a.idlocalidad)
OR IdLocalidad in
(select nombreResidencia from PRIVADAS WHERE idLocalidad = a.idlocalidad)
WHERE a.idLocalidad = algun_id
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
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 23:17.