最佳答案
我尝试用 SQL 编写一个聚合查询,它返回一个表中所有连接到给定记录的记录的计数; 如果没有记录连接到给定记录,那么该记录的结果应该是 0
:
我的数据库如下所示(不幸的是,我无法更改结构) :
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
有一个复合 PRIMARY KEY("MESSAGEID", "PARTNO")
)
根据上面的数据,我应该得到这样的结果:
MESSAGEID COUNT(*)
-----------------------------------------------
1 2
2 0
很明显,我需要在 MESSAGE
表上执行左连接,但是如何返回 0
的计数,因为其中来自 MESSAGEPART
的连接列是 NULL
?我试过以下方法:
我试过了
SELECT m.MESSAGEID, COUNT(*) FROM MESSAGE m
LEFT JOIN MESSAGEPART mp ON mp.MESSAGEID = m.MESSAGEID
GROUP BY m.MESSAGEID;
然而,这回报
MESSAGEID COUNT(*)
-----------------------------------------------
1 2
2 1
我也试过
SELECT mp.MESSAGEID, COUNT(*) FROM MESSAGE m
LEFT JOIN MESSAGEPART mp ON mp.MESSAGEID = m.MESSAGEID
GROUP BY mp.MESSAGEID;
但现在又回来了
MESSAGEID COUNT(*)
-----------------------------------------------
1 2
1
我做错了什么?