2016-04-29 14 views
2

Ich bin ratlos. Hier ist mein Code. Ich versuche, drei Anzahlen zu RequestID beizutreten. Ich kann sie einzeln arbeiten lassen (ein Join), aber wenn ich alle drei in die Tabelle lege, bekomme ich doppelte Fehler, wo sie mehr Zeilen zählt, die mit der RequestID verbunden sind als in den einzelnen Tabellen. Ich habe verschiedene Beiträge gelesen, aber ich habe das Licht noch nicht gesehen. Ich weiß, dass mit der Anordnung oder der Reihenfolge der Joins, die die hinzugefügten Informationen verursachen, etwas nicht stimmt. Ich mache eine linke Verbindung, damit ich Nullen erfassen kann. Bitte helfen Sie. Vielen Dank.Müssen verstehen COUNT() und mehrere LINKEN JOIN-Fehler in SQL-Code

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

Ja, sorry. Ich meinte Nullwerte, die in der Tabelle standardmäßig als Nullen interpretiert werden. Ich werde bestätigen können, ob das am Montag funktioniert. – Stardance

+0

Boyd P, das hat den Trick gemacht. Vielen Dank! – Stardance

Antwort

3

Ein LINKER JOIN erfasst keine 0s. Es nimmt alle Zeilen aus der linken Tabelle und sucht nach übereinstimmenden Zeilen in der rechten Tabelle. Wenn es sie nicht findet, gibt es NULL (das sich von 0 unterscheidet) zurück.

Try this:

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

Unten ist eine andere Möglichkeit:

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

Dies ist auch eine gute Antwort und kann mit Joins besser funktionieren, obwohl ich Unterabfragen gesehen habe, die viel schneller laufen. Probieren Sie beide aus und wählen Sie diejenige aus, die schneller arbeitet. :) –