我有一组表,用来保存注册的日常信息。现在我需要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 |
5 | Zona 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(。