Peter Maier: MySQL: ort!=NULL-Abfrage

Hi!

Ich hab in meiner DB eine Spalte namens Ort, die Standardmässig NULL ist, wie kann ich nun abfragen wieviele Personen den Ort angegeben haben, meine Idee:

"SELECT COUNT(*) as userMitOrt FROM ".DB_TABLE_USERS." WHERE ort!=NULL"

Ich bin mir aber nicht ganz sicher ob diese Abfrage ganz richtig is oder ob man das !=NULL irgendwie anders formulieren muss, was sagt ihr dazu?

thx
Peter

  1. Hi Peter,

    "SELECT COUNT(*) as userMitOrt FROM ".DB_TABLE_USERS." WHERE ort!=NULL"

    Hier solltest du IS NOT NULL verwenden.

    Viele Grüße,
      ~ Dennis.

    1. danke!

      lg
      Peter

    2. Hi Dennis,

      "SELECT COUNT(*) as userMitOrt FROM ".DB_TABLE_USERS." WHERE ort!=NULL"

      Hier solltest du IS NOT NULL verwenden.

      nur als Ergänzung, COUNT() zählt nur Werte ungleich NULL (abgesehen vom Sonderfall COUNT(*)), sodass folgendes Statement genügen sollte:

      SELECT COUNT(ort) AS userMitOrt FROM tabelle

      Gruß,
      Andreas.

  2. Hi,

    Ich bin mir aber nicht ganz sicher ob diese Abfrage ganz richtig is oder ob man das !=NULL irgendwie anders formulieren muss, was sagt ihr dazu?

    NULL ist NIE gleich NULL:
    select if(NULL = NULL,'true','false');
    +---------------------------------+
    | if(NULL = NULL,'true','false')  |
    +---------------------------------+
    | false                           |
    +---------------------------------+

    Jetzt frage ich mich nur, warum das auch false ist:
    select if(NULL != NULL,'true','false');
    +---------------------------------+
    | if(NULL != NULL,'true','false') |
    +---------------------------------+
    | false                           |
    +---------------------------------+
    (getestet in 5.0.51)

    Vielleicht weiß das ja auch jemand hier?

    Aber wenn du "IS NULL", bzw. "IS NOT NULL" schreibst bist du auf jeden Fall auf der sicheren Seite.
    http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html

    mfG,
    steckl

    1. Hi steckl,

      Jetzt frage ich mich nur, warum das auch false ist:
      select if(NULL != NULL,'true','false');
      +---------------------------------+
      | if(NULL != NULL,'true','false') |
      +---------------------------------+
      | false                           |
      +---------------------------------+
      (getestet in 5.0.51)

      um es mit deinen Worten auszudrücken:

      NULL ist NIE gleich NULL:

      NULL ist auch NIE ungleich NULL.

      Ein Vergleich mit NULL ergibt immer NULL und NULL entspricht false. Siehe auch Working with NULL Values.

      Gruß,
      Andreas.

      1. Hi,

        um es mit deinen Worten auszudrücken:

        NULL ist NIE gleich NULL:

        NULL ist auch NIE ungleich NULL.

        Klingt logisch. Danke!

        mfG,
        steckl

    2. Hallo,

      Jetzt frage ich mich nur, warum das auch false ist:
      select if(NULL != NULL,'true','false');

      wieso fragst Du Dich das? Das ist doch wunderbar erklärt, auch schon oft im derzeit nur über Google durchsuchbaren Archiv.

      +---------------------------------+
      | if(NULL != NULL,'true','false') |
      +---------------------------------+
      | false                           |
      +---------------------------------+

      Vergleichsoperationen mit NULL als mindestens einem Operanden ergeben in SQL IMMER den Wert NULL. Der Wert NULL ist keiner der Werte, die als true gelten. Wo ist das Problem?

      Vielleicht weiß das ja auch jemand hier?

      Aber wenn du "IS NULL", bzw. "IS NOT NULL" schreibst bist du auf jeden Fall auf der sicheren Seite.
      http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html

      Hättest Du weitergeklickt und gelesen:

      http://dev.mysql.com/doc/refman/5.0/en/problems-with-null.html

      <zitat>
          In SQL, the NULL value is never true in comparison to any other value,
          even NULL. An expression that contains NULL always produces a NULL value
          unless otherwise indicated in the documentation for the operators and
          functions involved in the expression.
      </zitat>

      Freundliche Grüße

      Vinzenz