PostgreSQL 9.4 - Vergleichen von NULL-Werten

8

Unter normalen Bedingungen ergibt ein Vergleich eines NULL -Wertes mit einem anderen Wert einen anderen NULL -Wert.

%Vor%

Gibt NULL

zurück

Dies gilt (meistens) für den Vergleich beliebiger Zeilen, wie in der Dokumentation, 9.23, erklärt. 5. Vergleich der Zeilenkonstruktoren :

%Vor%

Gibt NULL

zurück

Beim Vergleich gut definierter zusammengesetzter Typen werden NULL -Werte jedoch als gleich behandelt.

%Vor%

Gibt TRUE

zurück

Dieses Verhalten scheint nicht dokumentiert zu sein (ich habe nachgesehen und keinen Hinweis auf das Verhalten gefunden).

Ich möchte dieses Verhalten verwenden, um einige Geschäftsregeln zu implementieren, und möchte sicherstellen, dass dies sicher ist.

  1. Entspricht dies jeder SQL-Spezifikation?
  2. Ist es wahrscheinlich wird sich das in Zukunft ändern?
losthorse 26.12.2015, 19:04
quelle

2 Antworten

2

Ich fand das in der offiziellen Dokumentation : [... ] In anderen Kontexten, in denen zwei Werte vom zusammengesetzten Typ verglichen werden, werden zwei NULL-Feldwerte als gleich betrachtet, und ein NULL wird als größer als ein Nicht-NULL betrachtet. Dies ist erforderlich, um ein konsistentes Sortier- und Indizierungsverhalten für zusammengesetzte Typen zu erhalten. . Ich denke, das löst deine Frage.

    
Ziggy Crueltyfree Zeitgeister 31.03.2016, 07:15
quelle
0

Illustration (Entschuldigung, ich kann das nicht in einem Kommentar, brauche die Formatierung):

%Vor%

Ergebnis:

%Vor%
  • Hinweis: Die verglichenen Objekte (Typ-Instanzen und Tupel) sind nicht NULL, nur einige ihrer Elemente.
  • Ich denke denke das ist das beabsichtigte Verhalten
  • IMHO das kommt dem Problem nahe, NULL-Elemente in zusammengesetzten Schlüsseln zuzulassen, (siehe die Gerüchte von Chris Date dazu)
  • wahrscheinlich würde das andere Verhalten zu noch seltsameren Artefakten führen
wildplasser 26.12.2015 21:46
quelle

Tags und Links