Ver Mensaje Individual
  #6 (permalink)  
Antiguo 06/12/2010, 18:33
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: Puedo hacer un doble group by utilizando una subconsulta?

Yo a todo el asunto le veo un problema inicial: La tabla "Ciudad" no está relacionada de ninguna forma con las demás, por lo que hacer un INNER JOIN con ella es algo traído de los pelos.
Me explico gráficamente. Este es el modelo según las tablas descriptas:

En este gráfico se puede apreciar que niguna de las otras tablas comparte la clave de la ciudad como FK, por lo que no se puede usar en un INNER JOIN.
Tampoco se puede hacer contra la dirección de la empresa, porque no tienen el mismo dominio: El nombre de la ciudad contiene 50 caracteres y el de la direccion 70.

Si la tabla EMPRESA lleva el código indicado, entonces si.

En cualquier caso lo primero que debes es buscar la relación con las empresas. No con las ciudades, ya que esa es la que te importa:
Código MySQL:
Ver original
  1.      e.raz_soc_emp,
  2.      eg.ape_egr,
  3.      eg.nom_egr
  4. FROM empresa e  
  5.      INNER JOIN empresas_trabajo_egresado ete USING (nit_emp)
  6.      INNER JOIN egresado eg USING (num_ced_egr)
  7. ORDER BY  raz_soc_emp, ape_egr;
Si esto produce resultados, entonces hay que probar:
Código MySQL:
Ver original
  1.      c.nom_ciu,
  2.      e.raz_soc_emp,
  3.      eg.ape_egr,
  4.      eg.nom_egr
  5. FROM empresa e  
  6.      INNER JOIN empresas_trabajo_egresado ete USING (nit_emp)
  7.      INNER JOIN egresado eg USING (num_ced_egr)
  8.      INNER JOIN ciudad c  USING (cod_ciu)
  9. ORDER BY  raz_soc_emp, ape_egr;
Hay que recordar que si no se ha vinculado una empresa con una ciudad, esta consulta no devolverá esa empresa. El INNER JOIN es restrictivo: todos los valores deben existir para que devuelva el registro.
Si existe la posibilidad de que no se haya vinculado el la empresa con la ciudad, debe usarse LEFT JOIN:
Código MySQL:
Ver original
  1.      c.nom_ciu,
  2.      e.raz_soc_emp,
  3.      eg.ape_egr,
  4.      eg.nom_egr
  5. FROM empresa e  
  6.      INNER JOIN empresas_trabajo_egresado ete USING (nit_emp)
  7.      INNER JOIN egresado eg USING (num_ced_egr)
  8.      LEFT JOIN ciudad c  USING (cod_ciu)
  9. WHERE TRUE OR c.cod_ciu IS NULL
  10. ORDER BY  raz_soc_emp, ape_egr;
Detalle: Si un campo puede ser NULL no se debe colocar en el ORDER BY o en el GROUP BY porque ninguna de las dos clausulas puede procesar nulos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)