Ver Mensaje Individual
  #10 (permalink)  
Antiguo 31/01/2015, 16:13
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, 4 meses
Puntos: 2658
Respuesta: Crear consultas para base de datos Mysql

Cita:
2.DNI y nombre de los conductores que hayan llevado todos los camiones de la empresa y número de rutas realizados por él con la empresa.
Hay al menos dos partes: a) Las camiones usados, y si los conductores usaron todos los camiones y b) las rutas realizadas por los conductores.
La primera parte hay muchas formas de hacerlo, pero podríamos usar una sencilla:
Código MySQL:
Ver original
  1. SELECT VP.dni, COUNT(DISTINCT VA.patente) usados
  2. FROM viaje_asignado VA
  3. HAVING usados = (SELECT COUNT(1) FROM vehiculos V);

La segunda es un poco más enredada, pero se puede pensar así:
Código MySQL:
Ver original
  1. SELECT CO.dni DocConductor, CO.nombre NombreConductor, GROUP_CONCAT(VP.ruta_id) rutasRealziadas
  2. FROM viaje_asignado VA
  3.     INNER JOIN viaje_programado VP ON VA.viaje_id = VP.viaje_id
  4.     INNER JOIN ruta R ON VP.ruta_id = R.ruta_id
  5.     INNER JOIN conductor CO ON VA.dni = CO.dni

Para combinarlo todo, podemos usar la primera como tabla derivada en el from:
Código MySQL:
Ver original
  1. INNER JOIN (SELECT VP.dni, COUNT(DISTINCT VA.patente) usados
  2.                 FROM viaje_asignado VA
  3.                 HAVING usados = (SELECT COUNT(1) FROM vehiculos V)) CV
  4.             ON CV.dni = CO.dni
Podría quedar entonces:
Código MySQL:
Ver original
  1. SELECT CO.dni DocConductor, CO.nombre NombreConductor, GROUP_CONCAT(VP.ruta_id) rutasRealziadas
  2. FROM viaje_asignado VA
  3.     INNER JOIN viaje_programado VP ON VA.viaje_id = VP.viaje_id
  4.     INNER JOIN ruta R ON VP.ruta_id = R.ruta_id
  5.     INNER JOIN conductor CO ON VA.dni = CO.dni
  6.     INNER JOIN (SELECT VP.dni, COUNT(DISTINCT VA.patente) usados
  7.                 FROM viaje_asignado VA
  8.                 HAVING usados = (SELECT COUNT(1) FROM vehiculos V)) CV
  9.             ON CV.dni = CO.dni;

Todo lo que te muestro es algo que aun hay que probar. Algunas restricciones en las consultas pueden funcionar bien en ciertas versiones de MySQL y no en otras.

¿Necesitas que siga, o ya se va entendiendo cómo se razona una consulta?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 31/01/2015 a las 19:35