2012-04-09 6 views
1

Ich bin sehr neu zu SQL. Das eigentliche Problem ist viel größer. Ich brauche Informationen in dem folgenden Fall. Sagen wir, ich habe zwei Tabellen wieUnbedingte bedingte SQL-Join, siehe Erklärung

MemberTable

MonthID | UserID | TeamID 
----------------------------- 
    1  | 1  | 6 
    1  | 2  | 6 
    1  | 3  | 6 
    1  | 4  | 6 

UND

ReportTable

ID* | MonthID | UserID | IsSend 
----------------------------------- 
1 | 1  | 2  | False 
2 | 1  | 3  | True 

Ich brauche Gesamtzahl der Benutzer nicht in ReportTable und die Benutzer, für die Der IsSendValue ist Falsch, dh count = 3

Ist es möglich, das in einer Abfrage zu tun? Bitte erläutern Sie, wenn es nicht möglich und mögliche Lösung ist.

Antwort

4
SELECT COUNT(DISTINCT UserID) 
FROM MemberTable 
WHERE UserID NOT IN (SELECT UserID FROM ReportTable) 
OR UserID IN (SELECT UserID FROM ReportTable WHERE IsSend=FALSE) 

sollten Benutzer zurückkehren mit UserID 1, 2 und 4. Eine kurze Abfrage das gleiche Ergebnis zu erzielen ist:

SELECT COUNT(DISTINCT UserID) 
FROM MemberTable 
WHERE UserID NOT IN (SELECT UserID FROM ReportTable WHERE IsSend=TRUE) 
+3

müssen Sie nicht eine 'DISTINCT' brauchen? – mshsayem

+0

Ja. Korrigiert entsprechend. Prost! –

+0

Danke. Eigentlich brauche ich DISTINCT nicht, da ich sie mit einer anderen Spalte gruppieren muss. –