SQL - Gruppieren nach mit linker Verknüpfung

8

Ich habe zwei Tische. Tabelle A enthält eine Liste von Mitarbeiternamen. Tabelle B ist eine komplexe Tabelle mit Informationen über Telefonanrufe von Mitarbeitern.

Mein Ziel ist es, eine Tabelle mit den Spalten 'name' und 'callCount' zu erstellen. Ich möchte dies mit einer "linken Verbindung" und einer "Gruppe von" erreichen, aber ich vermisse weiterhin die Mitarbeiter, die keine Anrufe getätigt haben. Wie kann ich es nur bekommen, um den Namen zu behalten und nur eine Null dort zu setzen?

Vielleicht bin ich nah und jemand kann meinen Tippfehler aufzeigen? Vielen Dank im Voraus für Ihre Hilfe, hier ist das SQL:

%Vor%     
Brandi 12.07.2010, 20:17
quelle

2 Antworten

25

Es ist ein JOIN, kein NULL-Problem: Ihr Filter ändert den OUTER in einen INNER JOIN. Das bedeutet, dass Sie nur COUNT erhalten, wenn Sie Zeilen in CallTable (B) haben und nicht den gewünschten OUTER JOIN.

%Vor%

Bearbeiten: Nach Ihrem Kommentar woanders, müssen alle Ihre Filter auf B in der abgeleiteten Tabelle sein, nicht in der äußeren wo.

    
gbn 12.07.2010, 20:26
quelle
2

Da Sie einen LINKEN JOIN verwenden, können Verweise auf die im LEFT JOIN definierte Tabelle null sein. Die Zeilen sind da, Sie sehen den Zählwert einfach nicht als Null. Dies bedeutet, dass Sie diesen NULL-Wert (in diesem Fall) in Null konvertieren müssen:

%Vor%

In diesem Beispiel wird COALESCE verwendet, ein ANSI-Standard zur Behandlung von NULL-Werten. Es wird den ersten Nicht-Null-Wert zurückgeben, aber wenn keiner gefunden werden kann, gibt es null zurück. ISNULL ist eine gültige Alternative für SQL Server, aber für andere nicht tragbar Datenbanken während COALESCE ist. Hier ist ein MSDN-Artikel, der die beiden Funktionen vergleicht .

    
OMG Ponies 12.07.2010 20:22
quelle

Tags und Links