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

left outer join + count + group by

Estas en el tema de left outer join + count + group by en el foro de Mysql en Foros del Web. Hola a todos. Resulta que tengo 2 tablas, album y fotos. Quiero hacer una consulta para ver todos los albumnes y el numero de fotos ...
  #1 (permalink)  
Antiguo 06/05/2011, 10:28
 
Fecha de Ingreso: marzo-2011
Mensajes: 4
Antigüedad: 13 años, 7 meses
Puntos: 0
left outer join + count + group by

Hola a todos.
Resulta que tengo 2 tablas, album y fotos.
Quiero hacer una consulta para ver todos los albumnes y el numero de fotos que hay dentro de cada album. Es la siguiente:

SELECT A1.*, COUNT(A2.ID) NUM_FOTOS FROM album A1 LEFT OUTER JOIN foto A2 ON A1.id = A2.id_album GROUP BY a2.id_album

El problema es que si hay dos albumes o mas sin fotos, en la consulta solo me muestra uno de ellos con 0 fotos, los demas no aparecen.

He probado solucionarlo con esta otra consulta:

SELECT * FROM album A1 LEFT OUTER JOIN (SELECT ID_ALBUM, COUNT(ID) NUM_FOTOS FROM foto GROUP BY id_album) A2 ON A1.id = A2.id_album

Esta vez si que me aparecen varios albumnes sin fotos, pero el campo num_fotos no aparece 0, sino NULL.

Alguien me puede ayudar. Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 06/05/2011, 10:43
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 9 meses
Puntos: 96
Respuesta: left outer join + count + group by

Saludos

Pensaría que solamente te haría falta agregar una condición

Código MySQL:
Ver original
  1. SELECT A1.*, COUNT(A2.ID) NUM_FOTOS
  2. FROM album A1
  3. LEFT OUTER JOIN foto A2 ON A1.id = A2.id_album
  4. GROUP BY a2.id_album
  5. HAVING count(A2.ID) >0
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #3 (permalink)  
Antiguo 06/05/2011, 10:45
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: left outer join + count + group by

El problema está claro. La función COUNT no puede contar campos NULL y como realizas un LEFT OUTER JOIN puede haber campos vacíos y por eso te da esos problemas en ambas consultas.
  #4 (permalink)  
Antiguo 09/05/2011, 09:44
 
Fecha de Ingreso: marzo-2011
Mensajes: 4
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: left outer join + count + group by

Encontre la solucion:

SELECT A1.*, COUNT(A2.ID) NUM_FOTOS FROM album A1 LEFT JOIN foto A2 ON A1.id = A2.id_album GROUP BY a1.id


Al parecer en lugar de GROUP BY A2.ID_ALBUM hay que poner A1.id

Resulta que es asi de sencillo, aunque la intuicion me decia lo contrario.

Espero que ayude a mas personas, ya que me he encontrado con este problema mas veces.

Gracias a los que respondisteis por vuestra atencion.

Un saludo

Etiquetas: count, group, join, left, outer
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 07:19.