LEFT JOIN - Problem/Frage

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • LEFT JOIN - Problem/Frage

      Ich habe Tabelle A in der ich die Verkäufe von Gutscheinen speichere. In Tabelle B speichere ich die Gutscheineinlösungen. In Tabelle B kann es mehrere Einträge zu einem Gutschein geben, wenn er in mehreren "Etappen" eingelöst wird oder gar keinen, wenn er noch nicht eingelöst wurde.

      Nun möchte ich eine Auswertung, wieviel bei jedem Gutschein noch offen ist. Ich habe dies mit

      SQL-Abfrage

      1. SELECT a.id, a.name, a.datum_text, a.betrag-SUM(b.betrag) FROM gutscheinverkauf a LEFT JOIN gutscheinannahme b ON a.id=b.gutschein WHERE a.erledigt=0 ORDER BY a.id DESC
      versucht.

      Damit bekomme ich aber das falsche Ergebnis.

      Wenn ich statt "SUM(b.betrag)" nur "b.betrag" schreibe, erhalte ich das richtige Ergebnis, so fern es pro Gutschein nur EINE Einlösung gab. Bei zwei Einlösungen erhalte den Gutschein zweimal zurück mit zwei Werten, deshalb brauche ich die Summe aller Einlösungen eines Gutscheins.

      Hat jemand eine Idee, wo mein Fehler ist?
    • Ich würde es so versuchen

      SELECT a.betrag-SUM(b.betrag), ..... FROM butscheinnahme AS b LEFT JOIN gutscheinverkauf AS a ON (a.id = b.gutschein) WHERE a.erledigt=0 GROUP BY b.bertrag ORDER by a.id DESC

      Aber nur geraten

      Gruß

      Claus
      2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

      Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
    • Du musst nach allen nicht-aggregierten Spalten gruppieren, also a.id, a.name, a.datum_text, a.betrag. Außerdem solltest du den Fall abfangen, dass es keine Gutscheinannahme gibt. In diesem Fall ist SUM(b.betrag) gleich NULL. Bei Postgres und einigen anderen Systemen geht das mit COALECE:

      SQL-Abfrage

      1. SELECT a.id, a.name, a.datum_text, a.betrag-COALESCE(SUM(b.betrag), 0) FROM gutscheinverkauf a LEFT JOIN gutscheinannahme b ON a.id=b.gutschein WHERE a.erledigt=0 ORDER BY a.id, a.name, a.datum_text, a.betrag DESC
      „Meine Komplikation hatte eine Komplikation.“