如果找不到记录,则count返回0



我有一组表,用来保存注册的日常信息。现在我需要MySQL中的一个查询,它包含当前日期的总记录。我做了一个很好的查询,但在没有注册任何记录的计算机上,我期望为0(零(。此处不返回0。

我尝试了IFNULL((和COALESCE((,但仍然得到了相同的结果。请帮助查询。谢谢

SELECT e.Equipo, COUNT(ec.ID_Equipo_Detalle) as captura  
FROM equipos as e 
LEFT JOIN equipos_detalle as eq
ON e.ID_Equipo = eq.ID_Equipo
LEFT JOIN elecciones_contactos as ec
on ec.ID_Equipo_Detalle = eq.ID_Equipos_Detalle
WHERE ec.FechaAlta BETWEEN CURRENT_DATE and CURRENT_DATE + 1
GROUP by ec.ID_Equipo_Detalle
ID_Equipos设备
1分区1
2分区2
3分区3
4分区4
5Zona 5
6分区6
7分区7
8分区8

您正在筛选出在给定日期没有任何记录的行。只需将过滤移到LEFT JOIN部分即可。

所以不是

LEFT JOIN elecciones_contactos as ec
on ec.ID_Equipo_Detalle = eq.ID_Equipos_Detalle
WHERE ec.FechaAlta BETWEEN CURRENT_DATE and CURRENT_DATE + 1
GROUP by ec.ID_Equipo_Detalle

做这个

LEFT JOIN elecciones_contactos as ec
on ec.ID_Equipo_Detalle = eq.ID_Equipos_Detalle
and ec.FechaAlta BETWEEN CURRENT_DATE and CURRENT_DATE + 1
GROUP by e.ID_Equipos

还要注意,我已将组从ec.ID_Equipo_Detalle移动到e.ID_Equipos

这是一个用于演示的db小提琴。

您的WHERE正在丢弃行,您需要使用子查询:

SELECT e.Equipo, COUNT(ec.ID_Equipo_Detalle) AS captura  
FROM equipos AS e 
LEFT JOIN equipos_detalle AS eq ON e.ID_Equipo = eq.ID_Equipo
LEFT JOIN (SELECT * FROM elecciones_contactos WHERE FechaAlta BETWEEN CURRENT_DATE and CURRENT_DATE + INTERVAL 1 DAY) AS ec ON ec.ID_Equipo_Detalle = eq.ID_Equipos_Detalle
GROUP by ec.ID_Equipo_Detalle

查询中的某些列名与表中的列名不匹配(查询中的ID_Equipo是表中的ID_Equipos(。

相关内容

  • 没有找到相关文章