需要了解 SQL 代码中的 COUNT() 和多个 LEFT JOIN 错误
Need to understand COUNT() and multiple LEFT JOIN error in SQL code
我很茫然。这是我的代码。我正在尝试将三个计数加入 RequestID。我可以让它们单独工作(一个连接),但是将所有三个都放在 table 中会给我带来重复错误,其中与 RequestID 关联的行数比单个 tables 中的行数更多。我一直在阅读各种帖子,但我还没有看到曙光。我知道导致添加信息的排列或连接顺序有问题。我正在做一个左连接,所以我可以捕获 0。请帮忙。谢谢。
SELECT RTable.RequestID,
Count(sSentRequest.FileName) AS SentRequest,
Count(sReceivedArticle.FileName) AS ReceivedArticle,
Count(sMessages.FileName) AS Messages
FROM ((RTable
LEFT JOIN sReceivedArticle ON RTable.RequestID =
sReceivedArticle.FolderRQ)
LEFT JOIN sSentRequest ON RTable.RequestID =
sSentRequest.FolderRQ)
LEFT JOIN sMessages ON RTable.RequestID = sMessages.FolderRQ
GROUP BY RTable.RequestID;
LEFT JOIN 不捕获 0。它从左侧 table 中获取所有行,并在右侧 table 中查找匹配的行。如果找不到它们,它会 returns NULL(不同于 0)。
试试这个:
SELECT RTable.RequestID,
(SELECT COUNT(FileName) FROM sSentRequest WHERE FolderRQ = RTable.RequestID) AS SentRequest,
(SELECT COUNT(FileName) FROM sReceivedArticle WHERE FolderRQ = RTable.RequestID) AS ReceivedArticle,
(SELECT COUNT(FileName) FROM sMessages WHERE FolderRQ = RTable.RequestID) AS Messages
FROM RTable
下面是另一种可能性:
SELECT RTable.RequestID
, COUNT(Nz(sSentRequest.FileName, 0)) AS SRCount
, COUNT(Nz(sReceivedArticle.FileName, 0)) AS RACount
, COUNT(Nz(sMessages.FileName, 0)) AS MsgCount
FROM RTable
LEFT JOIN sSentRequest ON sSentRequest.FolderRQ = RTable.RequestID
LEFT JOIN sReceivedArticle ON sReceivedArticle.FolderRQ = RTable.RequestID
LEFT JOIN sMessages ON sMessages.FolderRQ = RTable.RequestID
GROUP BY RTable.RequestID
我很茫然。这是我的代码。我正在尝试将三个计数加入 RequestID。我可以让它们单独工作(一个连接),但是将所有三个都放在 table 中会给我带来重复错误,其中与 RequestID 关联的行数比单个 tables 中的行数更多。我一直在阅读各种帖子,但我还没有看到曙光。我知道导致添加信息的排列或连接顺序有问题。我正在做一个左连接,所以我可以捕获 0。请帮忙。谢谢。
SELECT RTable.RequestID,
Count(sSentRequest.FileName) AS SentRequest,
Count(sReceivedArticle.FileName) AS ReceivedArticle,
Count(sMessages.FileName) AS Messages
FROM ((RTable
LEFT JOIN sReceivedArticle ON RTable.RequestID =
sReceivedArticle.FolderRQ)
LEFT JOIN sSentRequest ON RTable.RequestID =
sSentRequest.FolderRQ)
LEFT JOIN sMessages ON RTable.RequestID = sMessages.FolderRQ
GROUP BY RTable.RequestID;
LEFT JOIN 不捕获 0。它从左侧 table 中获取所有行,并在右侧 table 中查找匹配的行。如果找不到它们,它会 returns NULL(不同于 0)。
试试这个:
SELECT RTable.RequestID,
(SELECT COUNT(FileName) FROM sSentRequest WHERE FolderRQ = RTable.RequestID) AS SentRequest,
(SELECT COUNT(FileName) FROM sReceivedArticle WHERE FolderRQ = RTable.RequestID) AS ReceivedArticle,
(SELECT COUNT(FileName) FROM sMessages WHERE FolderRQ = RTable.RequestID) AS Messages
FROM RTable
下面是另一种可能性:
SELECT RTable.RequestID
, COUNT(Nz(sSentRequest.FileName, 0)) AS SRCount
, COUNT(Nz(sReceivedArticle.FileName, 0)) AS RACount
, COUNT(Nz(sMessages.FileName, 0)) AS MsgCount
FROM RTable
LEFT JOIN sSentRequest ON sSentRequest.FolderRQ = RTable.RequestID
LEFT JOIN sReceivedArticle ON sReceivedArticle.FolderRQ = RTable.RequestID
LEFT JOIN sMessages ON sMessages.FolderRQ = RTable.RequestID
GROUP BY RTable.RequestID