Hola Robert,
Lo primero felicitarte por encontrar una de las soluciones del capitulo 20, capitulo en el que no se han publicado las soluciones. Hasta ahora, tras poco más de cuatro años que está la web en marcha eres el único caso que conozco, así que felicidades.
La parte negativa es la clausula HAVING que has incorporado en tu solución, aunque el resultado es correcto, el hecho de haber usado el filtro en la clausula HAVING en lugar de la clausula WHERE denota que no tienes claro el propósito de cada cláusula, por lo que te sugiero que repases la lección 8, concretamente el apartado: "Diferencia entre WHERE y HAVING"
tu solución está mejor construida así:
SELECT p.id_quiniela, e.id_evento, l.equipo local, v.equipo visitante, p.pronostico
FROM pronosticos p, eventos e, equipos l, equipos v
WHERE p.id_jornada = e.id_jornada
AND e.local = l.id_equipo
AND e.visitante = v.id_equipo
AND p.id_jornada = e.id_jornada
AND p.id_evento = e.id_evento
AND p.id_quiniela =4
En cuanto a la construcción de la misma consulta usando INNER JOIN, te pongo el ejemplo que aparece en la lección 15:
- Código: Seleccionar todo
select C.TITULO CURSO , concat(A.APELLIDOS,', ',A.NOMBRE ) ALUMNO
from ALUMNOS_CURSOS AC inner join ALUMNOS A
on AC.ID_ALUMNO = A.ID_ALUMNO inner join CURSOS C
on AC.ID_CURSO = C.ID_CURSO
Fíjate que en ella aparecen tres tablas y, en la clausula ON se asocian las claves primarias de unas tablas con las foráneas de otras. Intenta hacer lo mismo con las cuatro tablas que aparecen en tu solución. recuerda poner el filtro :
WHERE p.id_quiniela =4
fuera del INNER JOIN, ja que este no tiene el propósito de relacionar tablas sino de filtrar los registros que el INNER relaciona y da como resultado.
saludos y suerte.