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

Sql en MySQL que no funciona

Estas en el tema de Sql en MySQL que no funciona en el foro de Mysql en Foros del Web. Buenas noches.- Imaginemos que tenemos las siguientes tablas.- TLocalidad con los campos IdLocalidad,IdProvincia,nombreLocalidad TResidenciasPrivadas con los campos denominacion,IdLocalidad,IdProvincia TResidenciasPublicas con los campos denominacion,IdLocalidad,IdProvincia ¿Quiero obtener ...
  #1 (permalink)  
Antiguo 27/12/2005, 13:04
 
Fecha de Ingreso: marzo-2004
Mensajes: 174
Antigüedad: 20 años
Puntos: 1
Sql en MySQL que no funciona

Buenas noches.-

Imaginemos que tenemos las siguientes tablas.-

TLocalidad
con los campos IdLocalidad,IdProvincia,nombreLocalidad

TResidenciasPrivadas
con los campos denominacion,IdLocalidad,IdProvincia

TResidenciasPublicas
con los campos denominacion,IdLocalidad,IdProvincia

¿Quiero obtener el IdLocalidad,nombreLocalidad de todas aquellas localidades que tienen alguna residencia privada o pública?

Parece una consulta muy sencilla, pero no me va, me acaba sacando siempre todas las localidades, y con el comando "union" no me funciona con MySql.

¿Alguna idea de como crear esta SQL?

Gracias
  #2 (permalink)  
Antiguo 28/12/2005, 02:53
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Que version de mysql??
  #3 (permalink)  
Antiguo 28/12/2005, 03:21
 
Fecha de Ingreso: marzo-2004
Mensajes: 174
Antigüedad: 20 años
Puntos: 1
MySQL 3.23.56
  #4 (permalink)  
Antiguo 28/12/2005, 03:27
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Código:
select TLocalidad.IdLocalidad,TLocalidad.IdProvincia,TLocalidad.nombreLocalidad
from TLocalidad, TResidenciasPrivadas, TResidenciasPublicas
where
TLocalidad.IdLocalidad=TResidenciasPrivadas.IdLocalidad or
TLocalidad.IdLocalidad=TResidenciasPublicas.IdLocalidad
  #5 (permalink)  
Antiguo 28/12/2005, 03:56
 
Fecha de Ingreso: marzo-2004
Mensajes: 174
Antigüedad: 20 años
Puntos: 1
Se queda colgado el MySQL cuando ejecuto esa consulta.

De todos modos no entiendo porque en MySQL no funciona algo tan básico como:

Select campo from tabla where IdCampo IN (select IdCampo from OtraTabla where...)

Me da error en el IN, ¿Cómo se hace en MySQL una inclusión de un conjunto resultante de datos?

De todos modos si pongo:

Select campo from tabla where IdCampo IN (1,3,7,9,11)

No me da ningún error, pero si es una sql anidada me da error.

¿Alguna idea? ¿debo utilizar un comando distinto al IN?

Gracias
  #6 (permalink)  
Antiguo 28/12/2005, 04:02
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
El problema es que tu versión no adminte subquerys, deberías actualizarla a 4.1.x o mejor a 5.x.

Si se queda colgado es porque tiene poca potencia la máquina, o estas en un servidor remoto o devuelve muchos registros, no por la consulta. Es un problema de tu versión que haya que hacer productos cartesianos en vez de joins o subconsultas que sería más rápido.
  #7 (permalink)  
Antiguo 28/12/2005, 06:37
 
Fecha de Ingreso: marzo-2004
Mensajes: 174
Antigüedad: 20 años
Puntos: 1
Ya conseguí hacerlo, pongo el resultado por si a alguien en el futuro tiene problemas con este tipo de consultas en MySQL.-

SELECT DISTINCT TLocalidad.IdLocalidad, TLocalidad.Localidad FROM TLocalidad INNER JOIN TResPublica ON TLocalidad.IdLocalidad = TResPublica.IdLocalidad AND TLocalidad.IdProvincia = TResPublica.IdProvincia LEFT JOIN TListPrivadas ON TLocalidad.IdLocalidad = TListPrivadas.IdLocalidad AND TLocalidad.IdProvincia = TListPrivadas.IdProvincia WHERE TLocalidad.IdProvincia =45 ORDER BY localidad

Saludos
  #8 (permalink)  
Antiguo 28/12/2005, 07:11
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
La version 3.23.56 te admite joins???
  #9 (permalink)  
Antiguo 29/12/2005, 03:23
 
Fecha de Ingreso: marzo-2004
Mensajes: 174
Antigüedad: 20 años
Puntos: 1
Si, me los admite sin problemas.

Pero acabo de comprobar que esta sql no es correcta del todo, porque si una localidad está en listPrivadas pero no está en resPublica no me la saca, ya no se como modificar está SQL para que me saqué todas las localidades tanto de listPrivadas como ResPublica.

¿Alguna idea?

Gracias
  #10 (permalink)  
Antiguo 29/12/2005, 03:24
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Prueba haciendo ambos joins con left

Código:
SELECT DISTINCT TLocalidad.IdLocalidad, TLocalidad.Localidad FROM TLocalidad LEFT JOIN TResPublica ON TLocalidad.IdLocalidad = TResPublica.IdLocalidad AND TLocalidad.IdProvincia = TResPublica.IdProvincia LEFT JOIN TListPrivadas ON TLocalidad.IdLocalidad = TListPrivadas.IdLocalidad AND TLocalidad.IdProvincia = TListPrivadas.IdProvincia WHERE TLocalidad.IdProvincia =45 ORDER BY localidad
  #11 (permalink)  
Antiguo 29/12/2005, 04:16
 
Fecha de Ingreso: marzo-2004
Mensajes: 174
Antigüedad: 20 años
Puntos: 1
Claro que es eso, a veces lo más obvio no se ve ni en horas.

Muchas gracias
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 17:08.