MySQL SQL Code fehlerhaft, why?

resoucer

Gesperrt
ID: 77379
L
20 April 2006
2.846
109
Hallo undzwar habe ich folgenden SQL Code versucht auszuführen

PHP:
SELECT status.shipment, b.bestellmengen, b.kontrakt, b.bestellnr, b.liefertermin, b.materialnr, kontrakt_artikel.materialbezeichnung AS `bezeichnung`
FROM `bestellungen` AS `b`
LEFT JOIN `kontrakt_artikel` ON ( b.materialnr = kontrakt_artikel.materialnr )
LEFT JOIN `status` ON ( status.bestellungnr = b.bestellnr
AND status.materialnr = b.materialnr
AND status.status = 'Erledigt' ) 

UNION
SELECT sum(shipment) as `summe` from status JOIN status.bestellungnr=b.bestellnr and status.materialnr=b.materialnr
GROUP by b.bestellnr, kontrakt_artikel.materialbezeichnung ORDER BY b.liefertermin DESC

ERROR:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'status.bestellungnr=b.bestellnr and status.materialnr=b.materialnr GROUP b' at line 9

Wenn ich den SQL Code so ausführe:

PHP:
SELECT status.shipment, b.bestellmengen, b.kontrakt, b.bestellnr, b.liefertermin, b.materialnr, kontrakt_artikel.materialbezeichnung AS `bezeichnung`
FROM `bestellungen` AS `b`
LEFT JOIN `kontrakt_artikel` ON ( b.materialnr = kontrakt_artikel.materialnr )
LEFT JOIN `status` ON ( status.bestellungnr = b.bestellnr
AND status.materialnr = b.materialnr
AND status.status = 'Erledigt' ) 
GROUP by b.bestellnr, kontrakt_artikel.materialbezeichnung ORDER BY b.liefertermin DESC

Geht es, aber das Problem ist das ich die Summe aus shipment möchte und er mir halt alle zusammenfässt mit der gleichen Bestellnr und der gleichen Materialnr.

Hoffe mir kann da wer einen Gedankenanstoß geben.

Sollte eigentlich nur eine Kleinigkeit sein
 
im Union haste einen neuen Select drin, da kann es sein, dass er das b als Abkürzung von der Tabelle bestellungen nicht schluckt, da du ja nur Select xxx From status hast.

Probiers einfach mal ;)

Grüße
 
im Union haste einen neuen Select drin, da kann es sein, dass er das b als Abkürzung von der Tabelle bestellungen nicht schluckt, da du ja nur Select xxx From status hast.

Probiers einfach mal ;)

Grüße

PHP:
UNION
SELECT sum(shipment) as `summe` from status JOIN status.bestellungnr=bestellungen.bestellnr and status.materialnr=bestellungen.materialnr
GROUP by b.bestellnr, kontrakt_artikel.materialbezeichnung ORDER BY b.liefertermin DESC

geht auch nicht :-(

HTML:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.bestellnr and status.materialnr=bestellungen.materialnr GROUP by b.bestellnr, k' at line 9
 
Wenn Du mit UNION zwei Teilergebnisse zu einem Gesamtergebnis zusammenführst, müssen beide Teilergebnisse die gleiche Anzahl Spalten und kompatible Spaltentypen besitzen.

Ausserdem fehlt im zweiten SELECT nach dem JOIN ein Tabellenname
 
Zuletzt bearbeitet:
Wenn Du mit UNION zwei Teilergebnisse zu einem Gesamtergebnis zusammenführst, müssen beide Teilergebnisse die gleiche Anzahl Spalten und kompatible Spaltentypen besitzen.

mhh, wie kann ich denn dann am besten bei dem Code

PHP:
SELECT status.shipment, b.bestellmengen, b.kontrakt, b.bestellnr, b.liefertermin, b.materialnr, kontrakt_artikel.materialbezeichnung AS `bezeichnung`
FROM `bestellungen` AS `b`
LEFT JOIN `kontrakt_artikel` ON ( b.materialnr = kontrakt_artikel.materialnr )
LEFT JOIN `status` ON ( status.bestellungnr = b.bestellnr
AND status.materialnr = b.materialnr
AND status.status = 'Erledigt' )  
GROUP by b.bestellnr, kontrakt_artikel.materialbezeichnung ORDER BY b.liefertermin DESC

die Summe von shipment bekommen (gibt verschiedene Zeileneinträge dort)
 
Ich rätsle noch etwas an Deinem Datenmodell, aber sowas hier könnte klappen:

Code:
SELECT
 benötigte-spalten
FROM BESTELLUNG B
INNER JOIN KONTRAKT_ARTIKEL K
ON B.MATERIALNUMMER = K.MATERIALNUMMER
INNER JOIN 
( SELECT BESTELLUNGNR , MATERIALNR , SUM ( SHIPMENT ) AS SUMME
  FROM STATUS 
  WHERE STATUS = 'erledigt'
  GROUP BY BESTELLUNGNR , MATERIALNR ) S
ON B.BESTELLNR = S.BESTELLUNGNR
AND B.MATERIALNR = S.MATERIALNR
 
glaube so gehts

PHP:
SELECT sum(status.shipment) as `summe`, status.shipment, b.bestellmengen, b.kontrakt, b.bestellnr, b.liefertermin, b.materialnr, kontrakt_artikel.materialbezeichnung AS `bezeichnung`
FROM `bestellungen` AS `b`
LEFT JOIN `kontrakt_artikel` ON ( b.materialnr = kontrakt_artikel.materialnr )
LEFT JOIN `status` ON ( status.bestellungnr = b.bestellnr
AND status.materialnr = b.materialnr
AND status.status = 'Erledigt' ) 

GROUP by b.bestellnr, kontrakt_artikel.materialbezeichnung 
ORDER BY b.liefertermin DESC

summe passt auf jedenfall ich teste es gerade noch nen wenig