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

Ayuda: Consulta Multitabla Compleja (para mi)

Estas en el tema de Ayuda: Consulta Multitabla Compleja (para mi) en el foro de Mysql en Foros del Web. Tengo un problema bastante complejo para mí. Os explico la situación. Tengo tres tablas: Cimas: | id_cima | nombre | altitud | |---------|----------|---------| | 01 ...
  #1 (permalink)  
Antiguo 02/09/2009, 05:49
 
Fecha de Ingreso: septiembre-2009
Mensajes: 5
Antigüedad: 14 años, 7 meses
Puntos: 0
Ayuda: Consulta Multitabla Compleja (para mi)

Tengo un problema bastante complejo para mí. Os explico la situación.

Tengo tres tablas:

Cimas:
| id_cima | nombre | altitud |
|---------|----------|---------|
| 01 | Everest | 8844 |
| 02 | Trevinca | 2127 |
| 03 | Teide | 3718 |
| 04 | Fuji-san | 3776 |

Relacion_cimas_paises:
| id_rel | id_cima | id_pais |
|--------|---------|---------|
| 01 | 01 | 03 |
| 02 | 02 | 01 |
| 03 | 03 | 01 |
| 04 | 04 | 02 |

Paises:
| id_pais | nombre |
|---------|--------|
| 01 | España |
| 02 | Japón |
| 03 | Nepal |



Mi problema es al querer sacar al cimas más altas de cada uno de los países con una sola consulta. Mi consulta es:

SELECT paises.nombre, cimas.*
FROM paises JOIN relacion_pais_cima USING (id_pais) JOIN cimas USING (id_cima)
GROUP BY pais_n
ORDER BY pais_n DESC

Me falla, ya que para España me muestra Trevinca con 2127 en lugar de mostrarme Teide con 3718 (ya que Trevinca es el primero).

Alguién que me pueda ayudar. ¿Necesitais más datos?
  #2 (permalink)  
Antiguo 02/09/2009, 08:00
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Ayuda: Consulta Multitabla Compleja (para mi)

SELECT cimas.nombre, cimas.altitud, paises.nombre FROM paises INNER JOIN relacion_pais_cima USING (id_pais) INNER JOIN cimas USING (id_cima) INNER JOIN (SELECT id_pais paises, max(altitud) altitudes FROM cimas JOIN relacion_pais_cima USING (id_cima) GROUP BY id_pais)t1 ON t1.paises = pais.id_pais AND t1.altitudes = cimas.altitud

No la he probado.
  #3 (permalink)  
Antiguo 02/09/2009, 08:02
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: Ayuda: Consulta Multitabla Compleja (para mi)

Cita:
SELECT paises.nombre, cimas.*
FROM paises JOIN relacion_pais_cima USING (id_pais) JOIN cimas USING (id_cima)
GROUP BY pais_n
ORDER BY pais_n DESC
Prueba haciendo el order by con el campo altitud y no pais_n.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 02/09/2009, 09:50
 
Fecha de Ingreso: septiembre-2009
Mensajes: 5
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Ayuda: Consulta Multitabla Compleja (para mi)

Cita:
Iniciado por jurena Ver Mensaje
SELECT cimas.nombre, cimas.altitud, paises.nombre FROM paises INNER JOIN relacion_pais_cima USING (id_pais) INNER JOIN cimas USING (id_cima) INNER JOIN (SELECT id_pais paises, max(altitud) altitudes FROM cimas JOIN relacion_pais_cima USING (id_cima) GROUP BY id_pais)t1 ON t1.paises = pais.id_pais AND t1.altitudes = cimas.altitud

¡¡¡ FUNCIONA !!! Es impresionante pero funciona (ya pensaba que no se podría). Corregí un pequeño fallo, pero del resto perfecto. El fallo era por llamarle pais a la tabla de paises:
Código:
... ON t1.paises = pais.id_pais AND t1.altitudes = cimas.altitud
Muchas Gracias.


En cuanto a la respuesta de huesos52, el problema es que MySQL construye la tabla con los registros que se van a devolver y luego la ordena, por lo que me ordenaría por altitud, pero sin tener en cuenta el Teide.

La respues de jurena es, a mi modo de ver, perfecta.
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 04:02.