Ver Mensaje Individual
  #7 (permalink)  
Antiguo 29/11/2009, 15:36
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Select distinct

Vamos por partes:
- El uso de P en lugar de la tabla es porque cuando tienes nombres largos que debes repetir constantemente en los campos usados para consultas, especialmente al usar JOINS, es conveniente el uso de alias, que se declaran en el FROM, sea usando la cláusula AS, como simplemente adjuntando el nombre de alias a continuación. También se pueden declarar los alias en el SELECT para los campos usados (ver este ejemplo).
- Si vas a hacer un JOIN de tablas, las relaciones deben ponerse preferentemente en el FROM a través del JOIN (la coma es su sinónimo) respectivo y con la cláusula ON. Esto es así porque el parser de MySQL no puede optimizar la lectura de tablas si estas condiciones están el el WHERE, y sí lo puede hacer si están en el FROM.
- El orden de GROUP BY y ORDER BY es único. Si los pones al revés te dará un error de sintaxis. En tu caso, para lograr lo que quieres, debes hacer uso de una función agrupada más: MAX().
- El ORDER BY debe contener los campos en el mismo orden en que se espera ordenar. En tu caso hay que ordenar la especie primero, o te las mezclará, y luego el peso. Imagina que es una tabla de Excel. La lógica es la misma.
- Cuando tengas dudas de sintaxis, o quieras saber para qué se usan las cláusulas, o el roden de las mismas, dale una leída al manual de referencia de MySQL. La mayor parte de las respuestas están allí. Ten paciencia para leerlo: MySQL 5.0 Reference Manual

Código SQL:
Ver original
  1. SELECT DISTINCT
  2.   R.id_especie,
  3.   R.id_socio,
  4.   R.id_pantano,
  5.   MAX(R.kg) kg,
  6.   R.cm,
  7.   R.imajen,
  8.   U.usuario_id,
  9.   U.nombre_usuario,
  10.   P.id,
  11.   P.pantano,
  12.   E.id,
  13.   E.especie,
  14.   E.especie
  15. FROM records R
  16.   INNER JOIN usuarios U ON R.id_socio = U.usuario_id
  17.   INNER JOIN pantano P ON R.id_pantano = P.id
  18.   INNER JOIN especies E ON R.id_especie=E.id
  19. GROUP BY R.id_especie
  20. ORDER BY R.id_especie;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)