Announcement

Collapse
No announcement yet.

NULL-Werte sind wenig witzig

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • NULL-Werte sind wenig witzig

    Hallo,

    Ich greife mittels IBDataset ( IBX v4.2 ) auf eine IB6-DB zu. Dabei lässt sich folgendes beobachten:

    Wenn ich in einer WHERE Klausel bestimmte Daten ausschliesse z.B. ( where WERT <> -1 ), dann unterdrückt IB6 auch gleich alle Sätze, deren WERT-Feld <NULL> enthält.

    Bei 'normalen' Feldern, könnte ich dieses Verhalten zwar mittels Default-Wert umschiffen, aber bei outer-joins habe ich zwangsläufig NULL-Werte in manchen Feldern.

    Soll dieses 'Feature' abgestellt werden, oder erweitere ich meine WHERE Klauseln jetzt immer mit (... or ( WERT is NULL ) ) ??

    Gruß Gesine

  • #2
    Das kannst du vermeiden, in dem du bei der felddefinition folgendes festlegst

    create table ....
    feld char(1) not null default ' ',
    ...

    Gruß
    Holger

    IBExpert - The most Expert for InterBase
    <a href="http://www.ibexpert.com>http://www.ibexpert.com</a&gt

    Comment


    • #3
      oops, hatte gar nicht alles gelesen :-)
      hast du meinen Artikel gelesen im entwickler (OOP)?
      wenn nein, www.dibug.de/oop
      wenn ja, dann gab es darin eine Datenbankstruktur, mit der man outer joins vermeidet.

      Könnte weiterhelfen

      Gruß

      Holge

      Comment


      • #4
        Hallo,

        Deinen Artikel habe ich leider nicht gelesenun unter der angegebenen Adresse finde ich nr etwas zu Treeview. Meinst du das ??

        Wenn man deinen Vorschlag konsequent weiterdenkt, dann bedeutet dies:

        Vermeide grundsätzlich Where-Klauseln mit Feldern, die NULL enthalten könnten.

        Schon ne' ziemlich starke Einschränkung für eine SQL-DB oder ???

        Vielleicht sollte man die IB-Entwickler doch drauf drängen, die WHERE Auswertung zu überarbeiten ;-)

        Gruß Gesin

        Comment


        • #5
          Hallo Gesine,

          das "Grundübel" liegt im SQL-Standard, denn dort gibt es seitenlange Abhandlungen über die Auswirkungen von NULL-Werten. Generell wird dort die Empfehlung ausgesprochen, auf NULL zu verzichten und alle Spalten einer Tabelle als NOT NULL zu deklarieren. Wenn es ohne NULL nicht geht, muss man dann aber die sich daraus ergebenen Einschränkungen hinnehmen.

          Der InterBase hat hier keinen Bug, sondern hält sich an den SQL-Standard (NULL ist ein "unbekannter" Wert, so dass nur die Prüfung auf IS NULL bzw. IS NOT NULL Gewissheit schaft). Allerdings sieht der SQL92-Standard die Funktionen COALESCE und NULLIF vor - und deren Fehlen macht sich beim InterBase negativ bemerkbar

          Comment

          Working...
          X