Zliczanie liczby połączonych rzędów w lewym połączeniu
Próbuję napisać zagregowane zapytanie w języku SQL, które zwraca liczbę wszystkich rekordów dołączonych do danego rekordu w tabeli; Jeśli do danego rekordu nie dołączono żadnych rekordów, wynik dla tego rekordu powinien być0
:
Moja baza danych wygląda tak (niestety nie mogę zmienić struktury):
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
ma kompozytPRIMARY KEY("MESSAGEID", "PARTNO")
)
Biorąc pod uwagę powyższe dane, powinienem otrzymać coś takiego:
MESSAGEID COUNT(*)
-----------------------------------------------
1 2
2 0
Wydaje się oczywiste, że muszę wykonać lewe przyłączenieMESSAGE
stół, ale jak zwrócić liczbę0
dla wierszy, z których połączone kolumnyMESSAGEPART
sąNULL
? Próbowałem:
próbowałem
SELECT m.MESSAGEID, COUNT(*) FROM MESSAGE m
LEFT JOIN MESSAGEPART mp ON mp.MESSAGEID = m.MESSAGEID
GROUP BY m.MESSAGEID;
Jednak to powraca
MESSAGEID COUNT(*)
-----------------------------------------------
1 2
2 1
Próbowałem też
SELECT mp.MESSAGEID, COUNT(*) FROM MESSAGE m
LEFT JOIN MESSAGEPART mp ON mp.MESSAGEID = m.MESSAGEID
GROUP BY mp.MESSAGEID;
ale to wraca
MESSAGEID COUNT(*)
-----------------------------------------------
1 2
1
Co ja tu robię źle?