Bueno, recién ahora la cosa se pone interesante. SIn códigos es todo muy aburrido.... Lo siente.
Para poder entender como se resuelven las cosas en BBDD y SQL, tienes que razonar de modo algo diferente a lo que haces en programación. Eso tenlo presente porque es una de las primeras reglas que te enseñan en la asignatura, cuando la cursas en la universidad. Y es cierto.
No empieces tratando de resolver todo el problema, como si se tratase de un proceso que hay que resolver. No existe tal.
Empieza siempre por separar los bloques de información que se indican, de modo que queden los conceptos simples. Esto quiere decir que primero debes ver que bloques de datos que intervienen en la consulta pueden ser obtenidos en consultas de menor complejidad.
Vamos a los problemas y las soluciones que planteas, para que se entienda la idea.
El primero dice así:
Cita: Ciudades entre las que se haya programado el viaje de mayor duración junto con el vehículo y dni del conductor que lo hizo,
En este caso te piden tres cosas claras: a) Ciudades relacionadas con viajes; b) viaje más largos de todos, y c) conductores con sus DNI.
No pienses la consulta completa. Piensa cada parte de eso.
Voy a comenzar creando las tablas a partir de tu descripción pero las voy a normalizar un poco por necesidades de simpleza de consultas.
No uses "#" para los nombres de objetos, es el caracter de remark o comentario y puede causar problemas en algun momento.
Caso 1) Ciudades entre las que se haya programado el viaje de mayor duración junto con el vehículo y dni del conductor que lo hizo,
Veamos lo simple: viajes de mayor duración:
En principio el having debería funcionar bien en mi experiencia, pero hay otras formas de escribir esa consulta, aunque algo más complejas.
Luego vamos a las egunda parte: Viaje asignado, con su chofer y ciudad.
Código MySQL:
Ver originalSELECT VP.viaje_id
, CO.dni DocConductor
, CO.nombre NombreConductor
, C1.nombre Origen
, C2.nombre Destino
INNER JOIN viaje_programado VP
ON VA.viaje_id
= VP.viaje_id
Es una consulta algo compleja como primer ejercicio de SQL, eso te lo concedo. Quien te lo dio así está un poco alterado de las neuronas.
A esto hay que agregarle el filtrado anterior:
Con lo que al final podría funcionar así:
Código MySQL:
Ver originalSELECT VP.viaje_id
, CO.dni DocConductor
, CO.nombre NombreConductor
, C1.nombre Origen
, C2.nombre Destino
INNER JOIN viaje_programado VP
ON VA.viaje_id
= VP.viaje_id
viaje_id,
FROM VIAJE_ASIGNADO
) viajes
Para mi es un ejercicio algo complicado para iniciarse...
Luego vemos el resto.