Ich verstehe, warumnull + 1
oder (1 + null
) null
zurück: null
bedeutet „unbekannten Wert“, und wenn ein Wert nicht bekannt ist, ist sein Nachfolger als auch unbekannt. Das gleiche gilt für die meisten anderen Operationen mit null [*]Warum gibt SUM (...) in einem leeren Re-Cord-Set NULL statt 0 zurück?
jedoch ich verstehe nicht, warum das passiert folgendes:.
SELECT SUM(someNotNullableIntegerField) FROM someTable WHERE 1=0
Diese Abfrage liefert null
. Warum? Hier sind keine unbekannten Werte involviert! Die WHERE-Klausel gibt Null Aufzeichnungen, und die Summe aus einem leeren Satz von Werten ist 0
. [**] Beachten Sie, dass sich das Gerät nicht unbekannt ist, ist es bekannt leer sein.
Ich weiß, dass ich durch die Verwendung ISNULL
oder COALESCE
, um dieses Verhalten zu arbeiten, aber ich versuche, zu verstehen, warum dieses Verhalten, das mir kontraintuitiv erscheint, gewählt.
Gibt es Einsichten, warum dies sinnvoll ist?
[*] mit einigen bemerkenswerten Ausnahmen wie null OR true
, wo offensichtlich true
ist das richtige Ergebnis, da der unbekannte Wert einfach keine Rolle spielt.
[**] genau wie das Produkt eines leeren Satzes von Werten ist 1
. Wenn ich also $ (Z, +) $ zu $ (Z union {null}, +) $ erweitern würde, wäre die offensichtliche Wahl für das Identitätselement mathematisch 0
, nicht null
, seit x + 0 = x
, aber x + null = null
.
Vielleicht, weil Sie ein Aggregat verwenden. – Kermit
Wenn Sie nichts hinzufügen, erhalten Sie nicht 0, Sie erhalten nichts. –
Haben Sie sich den Ausführungsplan angesehen? – Kermit