Hilfe bei Join

billtorron

Neuer Benutzer
Beiträge
1
Hallo,

Ich möchte einen Join auf 2 Tabellen anwenden. In der Tabelle Bestellungen liegen Artikel mit ihren jeweiligen Farben vor. In der Tabelle Preisliste werden die Preise mit der Farbe=0 angelegt, wenn sie für alle Farben des Artikels gelten. Ausnahmen werden unter Angabe der Farbnummer gespeichert.

Ich möchte jetzt eine Abfrage erstellen und dabei Bestellmenge*UVP berechnen und stolpere über den Join. Diesen muss ich auf Artikel und Farbe anwenden. wenn ich das mache, dann erhalte ich keinen Preis für die Artikel in den Farben, die nicht in der Preisliste enthalten sind. Gibt es einen Lösungsvorschlag wie ich alle Artikel mit einem entsprechenden Preis versehen kann ohne Dublikate zu erzeugen? Vielen Dank im Voraus.


Tabelle Bestellungen

Artikel | Farbe | Bestellmenge
A| 12 | 5
A | 10 | 5
A | 15 | 5
A | 5 | 5
B | 10 | 5
B | 11 | 5
B | 8 | 5
B | 7 | 5
B | 15 | 5

Tabelle Preislsite

Artikel | Farbe| UVP
A | 0 | 119
A | 10 | 109
B | 0 |129
B | 10 |139
B | 11 | 149
 
Werbung:
so vielleicht?

Code:
test=*# select * from best ;
 artikel | farbe | menge
---------+-------+-------
  1 |  12 |  5
  1 |  10 |  5
  1 |  15 |  5
  1 |  5 |  5
  2 |  10 |  5
  2 |  11 |  5
  2 |  8 |  5
  2 |  7 |  5
  2 |  15 |  5
(9 Zeilen)

test=*# select * from preisliste ;
 artikel | farbe | uvp
---------+-------+-----
  1 |  0 | 119
  1 |  10 | 109
  2 |  0 | 129
  2 |  10 | 139
  2 |  11 | 149
(5 Zeilen)

test=*# select foo.artikel, foo.farbe, case when foo.uvp > 0 then foo.uvp else p.uvp end as uvp from (select b.*, coalesce(p.uvp,0) as uvp from best b left join preisliste p on (b.artikel, b.farbe)=(p.artikel, p.farbe)) foo left join preisliste p on (foo.artikel,0)=(p.artikel,p.farbe);;
 artikel | farbe | uvp
---------+-------+-----
  1 |  5 | 119
  1 |  10 | 109
  1 |  12 | 119
  1 |  15 | 119
  2 |  7 | 129
  2 |  8 | 129
  2 |  10 | 139
  2 |  11 | 149
  2 |  15 | 129
(9 Zeilen)

PostgreSQL, ob das mit Deiner DB geht mußt Du prüfen.
 
Zurück
Oben