Multi-Join Komplizierte SQL-Abfrage v. drei Tabellen

Hallo,

hoffe hier kann mir jemand helfen. Versuche diese 3 Tabellen nun in einer SQL-Abfrage auszulesen.
Ich benutze:
MySQL - 5.0.45
PHP Version 5.2.6


(Tabelle1) BESTELLUNGEN_INFO:

AUFTRAGSNR___AUFTRAGSART_______RABATT________MWST
001_____________order_____________10___________19
002_____________order_____________20____________0
003____________angebot____________- ____________-




(Tabelle2) BESTELLUNGEN:

AUFTRAGSNR__AUFTRAGSART__PRODUKT__ANZAHL__PREIS__K UNDENNR
001____________order________Buch______2______12___ k12
001____________order________CD________1______23
___k12
002____________order________DVD_______1______20 _____ k10



(Tabelle3) KUNDEN:

KUNDENNR ____NAME_____VORNAME
k12_______Mustermann ____Max
k10__________Meier_______Paul




Mein gewünschtes Ergebnis wäre:
ERGEBNIS:

KUNDENNR_____NAME_____AUFTRAGSNR______GESAMTPREIS
k12________Mustermann____001_______________(212)+(123)(0.9 Rabatt)
k10________Meier_________002_______________(1
20)*(0.8 Rabatt)





Habe schon viele Ansätze versucht, hiermit habe ich zumindest 2 Datenbanken “fast” richtig ausgelesen (d.h. unter meinen richtigen Ergebnissen waren am Ende 3 Zeilen mit komischen Werten).

[highlight=sql]
$sql = “SELECT b.rechnungsnr,a.mwst,a.rabatt,ROUND(SUM((b.einzelpreisb.anzahl)(1-(a.rabatt/100))),2) AS Gesamtpreis FROM bestellungen_info AS a INNER JOIN bestellungen AS b ON a.auftragsnr = b.auftragsnr AND a.auftragsart=‘order’ GROUP BY b.rechnungsnr,a.mwst ORDER BY b.rechnungsnr DESC ;”;
[/highlight]



Vielen Dank im Voraus, irgendwie komm ich damit noch nicht klar. Code-Beispiele wären super nett.

Du bist im falschen Forum, hier geht es um PostgreSQL.

SELECT k.kundennr AS kundennr,
           k.name AS name,
           bi.auftragsnr AS auftragsnr,
           (SELECT SUM(anzahl*preis)
               FROM bestellungen b
              WHERE b.auftragsnr = bi.auftragsnr) AS gesamtpreis
  FROM kunden k, bestellungen_info bi

So oder so ähnlich kommst du an die Daten heran. Das Einschränken der Bedingungen überlasse ich dir.

Verlaufen, hier geht es weder um MySQL noch um PHP.

Schnellschuß:

test=*# select * from bestellungen;
 abnummer |  art  | produkt | anzahl | preis | kunde
----------+-------+---------+--------+-------+-------
        1 | order | Buch    |      2 |    12 |    12
        1 | order | CD      |      1 |    23 |    12
        2 | order | DVD     |      1 |    20 |    10
(3 rows)

test=*# select * from bestellungen_info ;
 abnummer |   art   | rabatt | mwst
----------+---------+--------+------
        1 | order   |     10 |   19
        2 | order   |     20 |    0
        3 | angebot |        |
(3 rows)

test=*# select * from kunden;
 nummer |    name    | vorname
--------+------------+---------
     12 | mustermann | max
     10 | meier      | paul
(2 rows)

test=*# select k.nummer, k.name, k.vorname, a.abnummer, sum(a.anzahl*a.preis * (100-i.rabatt)/100) from kunden k left join bestellungen a on (k.nummer=a.kunde) left join bestellungen_info i on (a.abnummer=i.abnummer) group by 1,2,3,4;
 nummer |    name    | vorname | abnummer |         sum
--------+------------+---------+----------+---------------------
     10 | meier      | paul    |        2 | 16.0000000000000000
     12 | mustermann | max     |        1 | 42.3000000000000000
(2 rows)

test=*#

Andreas

[quote=“ads”]Du bist im falschen Forum, hier geht es um PostgreSQL.

nö isser nicht:

SQL (3 Betrachter)
Fragen und Probleme rund um die Abfragespache SQL.

Hin oder her, ob Du hier richtig bist. Egal. Aber ein Hinweis zum Tabellendesign:

Deine Tabelle Bestellungen enthält ja offensichtlich Bestellpositionen, während Bestellungen_Info die Kopfdaten zu den Bestellungen enthalten soll, oder?

Warum in beiden Tabellen die Auftragsart? Warum bei den Bestellpositionen jedesmal die Kundennummer? Was ist, wenn auf unterschiedliche Positionen einer Bestellung unterschiedliche Rabatte sein können?

Andreas

Du kannst noch so viel diskutieren davon bekommst du nicht mehr Recht.

das liegt daran, dass

  • dies garkeine diskussion ist
  • ich auch nicht weniger recht bekommen wuerde
  • du garnicht authorisiert bist mir mehr oder weniger recht zu geben

:slight_smile:

hallo Andreas …

sicher hast du damit vollkommen recht …

nur - hast du schon mal in eine SAP-betriebene DB geschaut? :slight_smile:

Zur Info an Dich: die Frage war nicht an Dich gerichtet.

Andreas