Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie schreibt man IS DISTINCT FROM und IS NOT DISTINCT FROM um?

Der IS DISTINCT FROM Prädikat wurde als Feature T151 von SQL:1999 eingeführt, und seine lesbare Negation, IS NOT DISTINCT FROM , wurde als Feature T152 von SQL:2003 hinzugefügt. Der Zweck dieser Prädikate besteht darin, sicherzustellen, dass das Ergebnis des Vergleichs zweier Werte entweder True ist oder Falsch , niemals Unbekannt .

Diese Prädikate funktionieren mit jedem vergleichbaren Typ (einschließlich Zeilen, Arrays und Multisets), was es ziemlich kompliziert macht, sie genau zu emulieren. Allerdings unterstützt SQL Server die meisten dieser Typen nicht, sodass wir ziemlich weit kommen können, indem wir nach Null-Argumenten/Operanden suchen:

  • a IS DISTINCT FROM b kann umgeschrieben werden als:

    ((a <> b OR a IS NULL OR b IS NULL) AND NOT (a IS NULL AND b IS NULL))
    
  • a IS NOT DISTINCT FROM b kann umgeschrieben werden als:

    (NOT (a <> b OR a IS NULL OR b IS NULL) OR (a IS NULL AND b IS NULL))
    

Ihre eigene Antwort ist falsch, da sie FALSE OR NULL nicht berücksichtigt ergibt Unbekannt . Beispiel:NULL IS DISTINCT FROM NULL sollte False ergeben . Ebenso ist 1 IS NOT DISTINCT FROM NULL sollte False ergeben . In beiden Fällen ergeben Ihre Ausdrücke Unbekannt .