2016-04-29 13 views
2

私は紛失しています。ここに私のコードです。私はRequestIDに3つのカウントに参加しようとしています。私はそれらを個々に(1つの結合)動作させることができますが、3つすべてをテーブルに入れておくと、重複エラーが発生し、個々のテーブルよりもRequestIDに関連する行が増えます。私は様々な記事を読んできましたが、私はまだその光を見ていません。私は、アレンジメントや追加された情報を引き起こしているジョインの順序に何か問題があることを知っています。私は左の結合をしているので、0を取り込むことができます。助けてください。ありがとうございました。SQLコードのCOUNT()と複数のLEFT JOINエラーを理解する必要があります

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; 
+0

申し訳ありません、はい。私はデフォルトでテーブルの0として解釈されるnull値を意味しました。私はそれが月曜日にそのトリックをするかどうか確認することができます。トリックをした – Stardance

+0

ボイドP、。ありがとうございました! – Stardance

答えて

3

LEFT JOINは0をキャプチャしません。左側の表からすべての行を取り出し、右側の表で一致する行を探します。見つからなければ、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 
1

は別の可能性である:

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 
+0

また、これは良い答えである、と私ははるかに高速に実行サブクエリを見てきましたが、参加するとのより良い実行することができます。両方を試して、より迅速に動作するものを選んでください。 :) –

関連する問題