sql >> Database >  >> RDS >> Sqlserver

Hoe te herschrijven IS ONDERSCHEIDEN VAN en IS NIET ONDERSCHEIDEN VAN?

De IS DISTINCT FROM predikaat werd geïntroduceerd als feature T151 van SQL:1999, en de leesbare ontkenning ervan, IS NOT DISTINCT FROM , is toegevoegd als functie T152 van SQL:2003. Het doel van deze predikaten is om te garanderen dat het resultaat van het vergelijken van twee waarden ofwel True is. of Fout , nooit Onbekend .

Deze predikaten werken met elk vergelijkbaar type (inclusief rijen, arrays en multisets), waardoor het nogal ingewikkeld is om ze exact te emuleren. SQL Server ondersteunt de meeste van deze typen echter niet, dus we kunnen behoorlijk ver komen door te controleren op null-argumenten/operanden:

  • a IS DISTINCT FROM b kan worden herschreven 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 kan worden herschreven als:

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

Uw eigen antwoord is onjuist omdat het geen rekening houdt met FALSE OR NULL evalueert tot Onbekend . Bijvoorbeeld:NULL IS DISTINCT FROM NULL zou moeten evalueren tot Onwaar . Evenzo, 1 IS NOT DISTINCT FROM NULL zou moeten evalueren tot Onwaar . In beide gevallen leveren uw uitdrukkingen Onbekend op .



  1. Waarom Cassandra leren met Hadoop?

  2. Array doorgeven aan Oracle-procedure vanuit c#

  3. Grootte van partitietabel in PostgreSQL 9.0

  4. Is het mogelijk om een ​​time-out in te stellen voor een SQL-query op Microsoft SQL Server?