Hallo,
ich würde gerne mit pgAdmin eine .csv Datei in eine psql-Datenbank
einspielen.
Die .csv Datei enthält die Tabelle bulk_prices mit den Spalten:
1 |
|
2 | partnumber|name|type|price|quantity
|
3 | ----------|----|----|-----|--------
|
4 | 1000 |sdf |c |12.43|5
|
5 | 1000 |xyz |c |10.20|10
|
6 | 1001 |abc |v |34.99|8
|
7 | ...
|
Diese Daten sollen in je zwei Tabellen aufgeteilt werden:
Tabelle price_rules:
1 |
|
2 | id|name|type|price
|
3 | --|----|----|-----
|
4 | 1 |sdf |c |12.43
|
5 | 2 |xyz |c |10.20
|
6 | 3 |abc |v |34.99
|
7 | ...
|
Tabelle price_rule_items:
1 |
|
2 | id|price_rules_id|type|op|value_int|value_num
|
3 | --|--------------|----|--|---------|---------
|
4 | 1 |1 |part| |1568 |
|
5 | 2 |1 |qty |ge| |5
|
6 | 3 |2 |part| |1568 |
|
7 | 4 |2 |qty |ge| |10
|
8 | 5 |3 |part| |6532 |
|
9 | 6 |3 |qty |ge| |8
|
10 | ...
|
Folgende "inserts" sollen also getätigt werden:
1 | bulk_prices.name -> price_rules.name
|
2 | bulk_prices.type -> price_rules.type
|
3 | bulk_prices.price -> price_rules.price
|
Die eindeutige ID (price_rules.id) die bei jedem Eintrag in der Tabelle
vergeben wird, soll jetzt mit den dazugehörigen Regeln in der Tabelle
price_rules_id verknüpft werden.
Für jede "price_rule" sollen jeweils zwei "price_rule_items" angelegt
werden:
Erster Eintrag:
1 | price_rules.id -> price_rule_items.price_rules_id
|
2 | 'part' -> price_rule_items.type
|
3 | parts.id -> price_rule_items.value_int
|
Zweiter Eintrag:
1 | price_rules.id -> price_rule_items.price_rules_id
|
2 | 'qty' -> price_rule_items.type
|
3 | 'ge' -> price_rule_items.op
|
4 | bulk_prices.quantity -> price_rule_items.value_num
|
Die eindeutige price_rules.id soll aus der Tabelle "parts" übernommen
werden:
1 |
|
2 | Tabelle "parts":
|
3 | id |partnumber
|
4 | ----|----------
|
5 | 1568|1000
|
6 | ...
|
7 | 6532|1001
|
8 | ...
|
Leider schaffe ich es nicht eine passende SQL "Abfrage" zu erstellen.
Ich habe meinen fehlerhaften Code mal auf SQLfiddle hochgeladen:
http://sqlfiddle.com/#!17/e5b6c/3
Für einen Eintrag in staffelpreise_tmp funktioniert der Code. Aber
sobald man mehr Einträge durch entfernen der "Auskommentierungen"
hinzufügt, enstehen fehlerhafe Mehrfacheinträge. Vermutlich durch die
implizierte INNER JOIN (WHERE staffelpreise_tmp.partnumber =
parts.partnumber;), welche nach bei jedem hinzufügen und aufrufen mehr
"matches" findet.
Ich habe schon versucht, das mit einem CURSOR und FETCH zu lösen, so
dass immer nur der gerade "abgearbeitete" staffelpreise_tmp.partnumber
Wert genommen wird, aber das bekomm ich irgendwie nicht hin.
Kann man diese INSERTS vielleich nur mit z.B. PL/pgSQL (FOR,IF,...)
lösen ?
Oder bekommt man das noch mit "reinem" SQL hin ?
Ich würde mich sehr freuen, wenn mir jemand mit diesem Problem helfen
könnte.
LG, Benjamin