Daniela Koller: Problem mit komplizierter SQL-Abfrage:

Beitrag lesen

Hi Andreas

SELECT sum(t1.Preis)
FROM Bestelldaten AS t1
LEFT JOIN Bestellungen AS t2 ON t1.Bestellungen_ID = t2.ID
GROUP BY t1.Preis
HAVING t2.Lieferanten_ID = $Lieferanten_ID

group by Preis hab ich núr so geschrieben, da ich in Erinnerung hatte, das man da was schreiben muß, da SUM einfach mit where nicht geht.

Der group by ist in dem Fall unnötig, er ist nur nötig, wenn mehrere andere Felder
noch da sind die verwirren können. Genauer muss über jeder Spalte die nicht eine
Aggregatsfunktion ist in der Ausgabe, ein Group by stehen weil das DBMS sonst nicht
wissen kann, welcher der Werte es denn für die Zeile nehmen soll (MySQL erzwingts nicht,
sondern bringt dir einfach irgendwelche wenn du es nicht tust).

Hat jemand eine Idee wie man das anders machen könnte, oder wo ein möglicher Fehler liegt?

Der Having könnte die Ursache sein, und zwar wird der erst ganz am Ende auf der
Resultatstabelle ausgeführt und da sind nur noch alle Felder drin, die auch oben
im Select, also der Ausgabe, drin sind. Wenn du die Summe zur LieferantenID haben
willst, dann kommt was du jetzt im Having hast in die where clause, müsste also so
aussehen:

Select sum(t1.Preis)
  from Bestelldaten as t1
  left join Bestellungen as t2 on t1.Bestellunge_ID = t2.ID
  where t2.lieferanten_ID = $Lieferanten_ID

Vielleicht wäre es aber auch geschickt das Problem andersrum anzupacken,
also die Preise dazuzujoinen.