Mysql join und Summe
mixmastertobsi
- datenbank
Hallo,
mit folgender Abfrage versuche ich aus drei Tabellen einen Wert zu summieren und auszugeben. Leider rechnet MySQL immer falsch, bzw. summiert doppelt. Wenn ich einen LEFT JOIN entferne, wird die Summe korrekt ausgegeben. Ich hoffe, ich habe das Problem verständlich erklärt.
SELECT artikel.produkt, SUM(artikel_reserviert.lager1) as reserviert, SUM(bestellung.bmenge) as bestellt FROM artikel
LEFT JOIN artikel_reserviert ON artikel_reserviert.anr=artikel.anr
LEFT JOIN bestellung ON bestellung.anr=artikel.anr
WHERE artikel.anr='121'
Ausgabe
produkt | reseriert | bestellt
------------------------------------
Artikel Test | 42 | 180
Tabelle artikel
anr | produkt
--------------
121 | Artikel Test
Tabelle artikel_reserviert
anr | auftrag | lager1
----------------------
121 | 33 | 1
121 | 34 | 1
121 | 35 | 1
121 | 36 | 1
121 | 37 | 1
121 | 38 | 1
Tabelle bestellung
anr | bmenge
----------------------
121 | 2
121 | 9
121 | 1
121 | 1
121 | 1
121 | 10
121 | 6
Fällt mir eigentlich nur ein, die Summen einzeln in einer Subquery abzufragen
SELECT a.produkt
,ar.reserviert
,ab.bestellt
FROM artikel a
LEFT JOIN (
SELECT anr, SUM(lager1) reserviert
FROM artikel_reserviert
GROUP BY anr
) ar USING(anr)
LEFT JOIN (
SELECT anr, SUM(bmenge) bestellt
FROM bestellung
GROUP BY anr
) ab USING(anr)
WHERE a.anr = 121
moin,
jedes andere dbms würde dir bei dieser abfrage eine fehlermeldung ausgeben, nur mysql läßt solche fragwürdigen abfragen zu und dabei kommt es dann zu merkwürdigen ergebnissen. auch der weg über einen OUTER JOIN erscheint mir nicht sinnvoll zu sein. was du willst ist eine korrelierte unterabfrage.
SELECT a.produkt,
(SELECT SUM(ar.lager1) FROM artikel_reserviert ar WHERE ar.anr = a.anr) Reserviert,
(SELECT SUM(b.bmenge) FROM bestellung b WHERE b.anr = a.anr) Bestellt
FROM artikel a
WHERE artikel.anr='121'
;
Ilja