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

SQL Abfrage rechnet nicht korrekt

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von SilentHunter124, 31 August 2012.

  1. SilentHunter124

    SilentHunter124 Neuer Benutzer

    Hallo,

    ich habe leider ein kleines Problem mit folgender SQL Abfrage:

    Code:
    SELECT l.id, l.bezeichnung, l.anzahl, l.pid, p.name, p.betrag,(l.anzahl-(SELECT SUM(anzahl) FROM `scvv_liegenschaften_liste` WHERE lid = l.id)) AS NOCH FROM `scvv_liegenschaften_liste_db` l,`scvv_liegenschaften_pfandsaetze` p WHERE (l.anzahl-(SELECT SUM(anzahl) FROM `scvv_liegenschaften_liste` WHERE lid = l.id)) > 0 AND pid = p.id
    Speziell diese Anweisung macht Probleme:

    Code:
    WHERE (l.anzahl-(SELECT SUM(anzahl) FROM `scvv_liegenschaften_liste` WHERE lid = l.id)) > 0 
    Wenn ich diese weglasse, sehe ich auch den Grund. Im Feld NOCH steht bei einigen Einträgen NULL, vermutlich weil die Unterabfrage ein leeres Resultat zurückliefert.

    Wie kann man per SQL sagen, dass NULL = 0 entspricht und damit auch richtig rechnet?
     
  2. Tommi

    Tommi Datenbank-Guru

    Hi,

    ich glaube, die eleganteste Methode wäre folgende:

    WHERE (l.anzahl-COALESCE((SELECT SUM(anzahl) FROM `scvv_liegenschaften_liste` WHERE lid = l.id), 0)) > 0

    Der Befehl COALESCE() zieht den ersten Wert aus einer Reihe von Komma-getrennten Ausdrücken, der nicht NULL ist.
    Da der erste Wert in der Unterabfrage NULL sein kann, wird im Folgenden der Konstante Wert "0" der Ausdruckliste herangezogen.
    Voraussetzung ist natürlich noch, dass l.antahl ebenfalls nicht NULL sein darf.

    Viele Grüße,
    Tommi
     
    PLSQL_SQL gefällt das.
  3. SilentHunter124

    SilentHunter124 Neuer Benutzer

    Hi, danke. Genau das wars was ich gesucht habe!
     
  4. ukulele

    ukulele Datenbank-Guru

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