Mit NULL rechnen (MySQL 4.1)

Mamphil

Erfahrenes Mitglied
Hallo!

Ich habe zwei Tabellen (hier vereinfacht dargestellt):
Tabelle Bestellungen enthält die Felder BestId (INT), Gesamtpreis (DECIMAL),
Tabelle Buchungen enthält die Felder BuchungsId (INT), BestId (INT), Buchung (DECIMAL)

Eigentlich kann ich so alle Bestellungen raussuchen und den noch offenen Betrag ermitteln:
Code:
SELECT be.BestId, be.Gesamtpreis, be.Gesamtpreis - SUM(bu.Buchung) AS BetragOffen
FROM Bestellungen AS be
LEFT JOIN Buchungen AS bu
ON bu.BestId = be.BestId
GROUP BY be.BestId
Das ganze funktioniert auch in MySQL 3.x; jetzt bin ich aber auf einem Server mit MySQL 4.1 und habe folgendes Problem:
Wenn noch keine Buchungen vorhanden sind, ergibt SUM(bu.Buchung) NULL. In MySQL war [Betrag] - NULL = [Betrag], in MySQL ist aber leider [Betrag] - NULL = NULL.

Habt ihr eine Idee, wie ich die NULL in eine 0 (Null) umwandeln kann?

Vielen Dank für eure Vorschläge,
Mamphil
 
Dann passe die Abfrage einfach daran an:
Code:
SELECT be.BestId, be.Gesamtpreis, IF(be.Gesamtpreis IS NULL, 0, be.Gesamtpreis) - SUM(bu.Buchung) AS BetragOffen
FROM Bestellungen AS be
LEFT JOIN Buchungen AS bu
ON bu.BestId = be.BestId
GROUP BY be.BestId
 
Super, vielen Dank für die schnelle Hilfe! An "IF" hatte ich gar nicht gedacht, ich wollte das irgendwie umwandeln...
Allerdings sieht mein Query so aus:
Code:
SELECT be.BestId, be.Gesamtpreis, be.Gesamtpreis  - IF(SUM(bu.Buchung) IS NULL, 0, SUM(bu.Buchung)) AS BetragOffen
FROM Bestellungen AS be
LEFT JOIN Buchungen AS bu
ON bu.BestId = be.BestId
GROUP BY be.BestId
Das Problem war schließlich, dass bei der Summe NULL rauskam ;)

Danke nochmals,
Mamphil
 
Hallo,

schöner geht's mit COALESCE:
Code:
SELECT be.BestId, be.Gesamtpreis, be.Gesamtpreis  - COALESCE(SUM(bu.Buchung), 0) AS BetragOffen
…
Der COALESCE-Operator gibt immer den ersten Wert seiner Parameterliste zurück, der nicht NULL ist (oder NULL, wenn es einen solchen nicht gibt).

Grüße,
Matthias
 
Zurück