Contando el número de filas unidas en la combinación izquierda
Estoy intentando escribir una consulta agregada en SQL que devuelve el recuento de todos los registros unidos a un registro determinado en una tabla; Si no se unieron registros al registro dado, entonces el resultado para ese registro debe ser0
:
Mi base de datos tiene este aspecto (no puedo cambiar la estructura, desafortunadamente):
MESSAGE
----------------------------------------------
MESSAGEID SENDER SUBJECT
----------------------------------------------
1 Tim Rabbit of Caerbannog
2 Bridgekeeper Bridge of Death
MESSAGEPART
----------------------------------------------
MESSAGEID PARTNO CONTENT
----------------------------------------------
1 0 (BLOB)
1 1 (BLOB)
3 0 (BLOB)
(MESSAGEPART
tiene un compuestoPRIMARY KEY("MESSAGEID", "PARTNO")
)
Teniendo en cuenta los datos anteriores, debería obtener algo como esto:
MESSAGEID COUNT(*)
-----------------------------------------------
1 2
2 0
Parece obvio que necesito hacer una unión izquierda en elMESSAGE
mesa, pero ¿cómo puedo devolver un recuento de0
para filas donde las columnas unidas deMESSAGEPART
sonNULL
? He intentado lo siguiente:
He intentado
SELECT m.MESSAGEID, COUNT(*) FROM MESSAGE m
LEFT JOIN MESSAGEPART mp ON mp.MESSAGEID = m.MESSAGEID
GROUP BY m.MESSAGEID;
Sin embargo, esto devuelve
MESSAGEID COUNT(*)
-----------------------------------------------
1 2
2 1
También he intentado
SELECT mp.MESSAGEID, COUNT(*) FROM MESSAGE m
LEFT JOIN MESSAGEPART mp ON mp.MESSAGEID = m.MESSAGEID
GROUP BY mp.MESSAGEID;
pero esto vuelve
MESSAGEID COUNT(*)
-----------------------------------------------
1 2
1
¿Qué estoy haciendo mal aquí?