Ver Mensaje Individual
  #8 (permalink)  
Antiguo 30/08/2008, 00:50
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Select con left join. Consulta compleja...Para mí

Esto hará lo que quieres, aunque no sé cuál será su rendimiento. Los nombres de los campos no son los mismos que los tuyos (hice una pequeña base para probar y adopté otros; las relaciones las hago con agentes.id y evaluaciones.idagente
La clave está en hacer la consulta y luego establecer una relación left join con el resultado de la consulta. Como decías, con las condiciones de fecha futuras no encuentra a los agentes que tengan evaluaciones. Ahora busca primero con un inner join, sin necesidad de usar el OR de la fecha y luego cruza esos resultados con las tablas agente y evaluaciones ya con un left join.

Cita:
SELECT agentes.agente, ifnull( T1.eval, '0' ) evaluaciones
FROM agentes
LEFT JOIN (

SELECT a.id, COUNT( idagente ) eval
FROM agentes a
INNER JOIN `evaluaciones` e ON a.id = e.idagente
WHERE e.fecha
BETWEEN '2008/08/25'
AND '2008/08/30'
GROUP BY a.id
)T1 ON agentes.id = T1.id
LEFT JOIN evaluaciones ON evaluaciones.idagente = agentes.id
GROUP BY agentes.id
Adapta esto a los nombres de tus campos y creo que ahora funcionará.
OBSERVA que yo uso BETWEEN ... AND... entre las fechas, y la función IFNULL para poner los ceros.