Hallo,
ich habe eine Tabelle für ein Lager (Eingänge)
CREATE TABLE lager (lagerNr CHAR(10), menge INT(11));
INSERT INTO lager VALUES ('A1', 15000);
INSERT INTO lager VALUES ('B1', 5000);
und eine für den Ausgang
CREATE TABLE ausgang (lagerNr CHAR(10), menge INT(11));
INSERT INTO ausgang VALUES ('A1', 10000);
INSERT INTO ausgang VALUES ('A1', 700);
INSERT INTO ausgang VALUES ('B1', 100);
Wenn ich jetzt wissen möchte, was noch auf dem Lager ist, mache ich das mit
SELECT lagernr, SUM(menge-
(SELECT SUM(menge) FROM ausgang WHERE lagerNr=l.lagerNr)) AS m
FROM lager l GROUP BY lagernr HAVING m>0;
+---------+------+
| lagernr | m |
+---------+------+
| A1 | 4300 |
| B1 | 4900 |
+---------+------+
Jetzt kann es allerdings sein, dass Lagernummern mehrfach vorkommen, also beispielsweise 'B1'
INSERT INTO lager VALUES ('B1', 6000);
Dann wird bei der Bestandsabfrage der Ausgang für B1 doppelt erfasst (kartesisches Produkt) und ich erhalte das falsche Ergebnis
+---------+-------+
| lagernr | m |
+---------+-------+
| A1 | 4300 |
| B1 | 10800 |
+---------+-------+
Korrekt wäre für B1: 10900.
Wie lässt sich das beheben?