WernerK: SQL Where Spalte != 1 bei Null Werten

Hallo,

mal eine ganz simple Frage:

Beispiel Tabelle "Anwender"

Vorname, Nachname, Angemeldet
----------------------------------—
Karl,    Napf,     1
Herbert, Maus,     NULL
Gustav,  Müller    1
Ulli,    Meier     NULL
Select Vorname, Nachname Where Angemeldet != 1

Warum kommt hier nichts zurück? Ich vermute wegen den NULL Spalten? Man müsste mit IS NULL arbeiten. Mich hat es nur etwas gewundert.

Gruss Werner

  1. Hi,

    Warum kommt hier nichts zurück? Ich vermute wegen den NULL Spalten? Man müsste mit IS NULL arbeiten. Mich hat es nur etwas gewundert.

    ja, null muß immer speziell behandelt werden. Wenn Du wirklich alle Einträge haben willst, bei denen eine Spalte != 1 ist mußt Du (spalte != 1 OR spalte IS NULL) in die Auswahlbedingungen aufnehmen.

    cu,
    Andreas a/k/a MudGuard

  2. Hallo

    Vorname, Nachname, Angemeldet
    ----------------------------------—
    Karl,    Napf,     1
    Herbert, Maus,     NULL
    Gustav,  Müller    1
    Ulli,    Meier     NULL
    
    Select Vorname, Nachname Where Angemeldet != 1
    

    Warum kommt hier nichts zurück? Ich vermute wegen den NULL Spalten?

    Ja.

    Man müsste mit IS NULL arbeiten.

    Ja. An der Stelle ist aber das Datenformat infrage zu stellen. Wenn jemand angemeldet sein kann oder nicht, handelt es sich um einen Ja-Nein-Status und nicht um einem Ja-Nichts-Status. Für diesen Fall bietet sich in MySQL der Feldtypt „Set“ mit '0' und '1' als möglichen Werten an (Angemeldet Set('0', '1') DEFAULT '0'). In MS SQL wäre das der Typ „Bit“, der von sich aus die 0 und die 1 als Entsprechungen für False und True bereitstellt.

    Tschö, Auge

    --
    Eine Kerze stand [auf dem Abort] bereit, und der Almanach des vergangenen Jahres hing an einer Schnur. Die Herausgeber kannten ihre Leser und druckten den Almanach auf weiches, dünnes Papier.
    Kleine freie Männer von Terry Pratchett
    1. Tach!

      Warum kommt hier nichts zurück? Ich vermute wegen den NULL Spalten?

      Ja.

      Wann immer NULL im Spiel ist, kann eine Operation damit nur NULL zurückliefern, wenn nicht spezielle NULL-Operatoren verwendet werden. Und NULL wird im booleschen Kontext zu false, so dass Bedingungen nicht erfüllt werden können.

      Für diesen Fall bietet sich in MySQL der Feldtypt „Set“ mit '0' und '1' als möglichen Werten an (Angemeldet Set('0', '1') DEFAULT '0').

      SET ist in dem Fall ungeeignet. Es handelt sich hier nicht um Schrödingers Katze, die das eine oder das andere oder auch beides oder nichts sein kann.

      Ein passender Typ ist hier BOOL oder BOOLEAN, das ein Synonym zu TINYINT ist. Also auch jeder beliebige Integertyp kann hier verwendet werden.

      dedlfix.