1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Abfrage liefert nicht die erwarteten Ergebnisse

Dieses Thema im Forum "Oracle" wurde erstellt von mbecher, 5 Oktober 2017.

  1. mbecher

    mbecher Neuer Benutzer

    Ich habe folgenden Problem:
    es sollen alle Datensätze ausgegeben werden, die folgenden Kriterien NICHT erfüllen:
    1. Typ = Typ 4
    2. Typ = Typ 6
    3. Typ = Typ 9
    4. Typ = Typ 5 und Art = Art 2
    5. Bezeichnung = nicht leer und Objekt = leer
    Die Datensätze sehen aktuell in der DB so aus:
    Typ Art Bezeichnung Objekt
    Typ 1 Art 1 Bez 1 (null)
    Typ 2 (null) (null) (null)
    Typ 3 Art 1 Bez 1 Objekt 1
    Typ 4 (null) (null) (null)
    Typ 5 Art 2 (null) Objekt 1
    Typ 6 (null) (null) Objekt 2
    Typ 7 (null) (null) (null)
    Typ 8 (null) (null) Objekt 3
    Typ 9 (null) (null) Objekt 2
    Typ 10 Art 3 (null) Objekt 1

    Mein aktueller Ansatz sah so aus:
    Select Typ,Art,Bezeichnung,Objekt from table
    WHERE (Typ <> 'Typ 4')
    AND (Typ <> 'Typ 6')
    AND (Typ <> 'Typ 9')
    AND ((Typ <> 'Typ 5') AND (Art <> 'Art 2'))
    AND ((Bezeichnung is not null) AND (Objekt is not null))

    Leider bekomme ich da nur Zeile 3 angezeigt. Mir fehlt aber noch die Zeilen 2,7,8 und 10.

    Kann mir jemand dazu helfen?

    PS: Ich muss es über das Ausschlussprinzip machen, da der Rest der Daten um einiges mehr ist.
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Du vergleichst NULL-Werte mit etwas. Das geht nicht. Coalesce() kann helfen.
     
  3. mbecher

    mbecher Neuer Benutzer

    Okay, der Befehl sagt mit gar nichts. Habt ihr mal nen Beispiel, wie das zu verwenden ist oder wie der in der Abfrage eingebaut wird?
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Code:
    test=*# select null = 0;
     ?column?
    ----------
    (1 Zeile)
    
    test=*# select coalesce(null,0) = 0;
     ?column?
    ----------
     t
    (1 Zeile)
    
    test=*# select coalesce(null,null,0) = 0;
     ?column?
    ----------
     t
    (1 Zeile)
    
    test=*# select coalesce(null,null,1) = 0;
     ?column?
    ----------
     f
    (1 Zeile)
    
    
    
    coalesce() liefert den ersten NOT-NULL - Parameter zurück. Deine Spalten Art und Bezeichnung enthalten null-Werte. coalesce(spalte,'') könnte Dir helfen.
     
  5. ukulele

    ukulele Datenbank-Guru

    Edit: hat sich erledigt
     
  6. mbecher

    mbecher Neuer Benutzer

    Okay, jetzt habe ich mal des Internet nach dem Coalesce-Befehl durchsucht und mit den Informationen von gestern kombiniert. Aber irgendwie bekomme ich keinen vernünftigen Syntax hin bzw. verstehe den Aufbau nicht. Kann mir jemand helfen, diesen in meine Abfrage zu integrieren? PS: Ich bin echt nur gelegentlicher SQL-Nutzer und eben kein Guru. Sehr es mir bitte nach.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden