2012-03-27 6 views
0

Anstatt eine NULL in einer Spalte zu haben, möchte ich eine 0 vorhanden sein.SQL Server - ISNULL funktioniert nicht bei Aktualisierungsabfrage

die folgenden zwei Tabellen Gegeben:

TABLE1 
ClientID  OrderCount 
1    NULL 
2    NULL 
3    NULL 
4    NULL 


Table2 
ClientID  OrderCount 
1    2 
3    4 
4    6 

HINWEIS: Die Ordercount Spalte in beiden Tabellen INT Datentyp.

UPDATE TABLE1 
SET OrderCount = ISNULL(TABLE2.OrderCount,0) 
FROM TABLE1 
INNER JOIN TABLE2 ON TABLE2.ClientID = TABLE1.CLIENTID 

Wenn ich tabelle1 sehen, sehe ich:

ClientID  OrderCount 
1    2 
2    NULL 
3    4 
4    6 

Also, dachte ich mir - "Offensichtlich sollte ich NULLIF verwenden und nicht ISNULL", so dass ich umgekehrt sie. Gleiches Ergebnis.

Was mache ich hier falsch? Wie bekomme ich eine 0 statt eine NULL in der Spalte?

Antwort

6

Sie benötigen eine LEFT JOIN anstelle einer INNER JOIN. Die Datensätze, die nicht übereinstimmen ClientID werden nicht einmal von Ihrer Abfrage berührt.

+0

Danke. Das hat es gelöst. – mikebmassey

0

Ihr Join filtert wahrscheinlich Zeilen heraus.

2

Sie INNER JOIN verwenden, aber Sie keine Client-ID 2 auf table2 haben so die Ergebnismenge wird nicht eine Zeile mit 2 enthalten Ersetzen Sie es mit LEFT JOIN