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

Consulta SQL sobre dos tablas

Estas en el tema de Consulta SQL sobre dos tablas en el foro de Mysql en Foros del Web. Hola a todos, Me ha surgido una duda en una consulta que tengo que hacer sobre dos tablas, en principio la idea es seleccionar ciclistas ...
  #1 (permalink)  
Antiguo 10/08/2016, 19:06
 
Fecha de Ingreso: enero-2012
Mensajes: 88
Antigüedad: 12 años, 3 meses
Puntos: 1
Consulta SQL sobre dos tablas

Hola a todos,

Me ha surgido una duda en una consulta que tengo que hacer sobre dos tablas, en principio la idea es seleccionar ciclistas de una tabla creada como ranking y ordenarlos por puntos, el problema me surje cuando quiero solo selecciona ciclistas menores de 23 años, lo he intentado así, pero no funciona.

Supongo que sea un fallo tonto el que tengo o algo totalmente diferente a lo que he hecho
Código MySQL:
Ver original
  1. SELECT a.ciclista, a.anio, a.puntos, b.id FROM (ciclismofem_ranking AS a) , (ciclismofem_ciclistas AS b)
  2. WHERE a.anio=$temporada AND ( ($temporada - year(b.fecha_nacimiento) <=23 ) AND a.ciclista = b.id  
  3. ORDER BY puntos DESC

Alguien me echa un pequeño cable con esta consulta?

Saludos

Última edición por gnzsoloyo; 10/08/2016 a las 19:08 Razón: Código de programación no permitido en los foros de bbdd
  #2 (permalink)  
Antiguo 11/08/2016, 08:14
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta SQL sobre dos tablas

Hola jona86:

El día de ayer se presentó una pregunta similar en este foro:

http://www.forosdelweb.com/f86/consu...acion-1154459/

En tu caso pasa lo mismo, al hacer el JOIN, echas a perder el filtro de la edad... y la solución es la misma, aplicar una condición IN o EXISTS con una subconsulta para los ciclistas de 23 años, algo así:

Código:
SELECT a.ciclista, a.anio, a.puntos, b.id 
FROM ciclismofem_ranking a 
INNER JOIN ciclismofem_ciclistas b ON a.ciclista = b.id  
WHERE
  a.anio=$temporada AND 
  a.ciclista IN (Aquí seleccionas a los ciclistas que tengan 23 años)
ORDER BY puntos DESC
haz la prueba y nos comentas. Si continuas con problemas postea cuál es la estructura de tus tablas y pon algunos datos de ejemplo y con gusto te ayudamos a resolver el problema.

y finalmente, puedes observar que hice algunos cambios adicionales en tu consulta, como recomendaciones:

1. No hagas JOINS implícitos, sino utiliza los JOIN's (LEFT, RIGTH o INNER según sea el caso) de manera explícita, es decir

En lugar de esto:

Código:
...
FROM tabla1, tabla2 
WHERE tabla1.campo = tabla2.campo
...
Haz esto

Código:
...
FROM tabla1
INNER JOIN tabla2 ON tabla1.campo = tabla2.campo
...
2. No es necesario que pongas tantos paréntesis, ya que en tu caso son todos completamente inútiles.

3. La palabra reservada AS también es completamente inútil y sólo se conserva por cuestiones de compatibilidad, pero no es necesario ponerla para especificar un alias.

Saludos
Leo.

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 03:39.