Hallo zusammen,
ich sitze an einer (für mich) kniffligen Aufgabe: ich habe 1 Tabelle ORDERS mit Bestellungen, deren Primärschlüssel das Feld ORDERNR ist.
Nun gibt es fachlich die Möglichkeit mehrere Einzelbestellungen zu einer Gesamtbestellung zusammenzufassen, sodass in derselben Tabelle ein weiterer Eintrag mit neuer ORDERNR angelegt wird. In einer weiteren Spalte ORDERS_FROM werden dabei die beteiligten ORDERNR der Originalbestellungen kommasepariert eingetragen, bspw." [ORDERS] 4711, 4712, 5001".
Da die Logik des Programms nur noch auf dem Datensatz der zusammengefassten Gesamtbestellung arbeitet, möchte ich sich ändernde Attribute auch an den Einzelbestellungen vermerken.
Ich hatte mir dazu folgendes überlegt:
Ich lege eine neue Tabelle TAB_TEMP an, in die ich zunächst die ORDERNR der Einzelbestellungen als Primärschlüssel hinterlege, die zu einer Gesamtbestellung zusammengefasst worden sind (die bekomme ich über ein gesetztes Flag bei der Einzelbestellung raus).
Jetzt würde ich am liebsten so etwas sagen wie "nimm aus der Tabelle TAB_TEMP Zeile für Zeile die jeweilige TAB_TEMP.ORDERNR und liefere die ORDERS.ORDERNR zurück, die TAB_TEMP.ORDERNR enthält, quasi
...
WHERE ORDERS_FROM LIKE ('%'|| (SELECT ORDERNR FROM TAB_TEMP)||'%')
...
und füge die ORDERS.ORDERNR der Gesamtbestellung in das Feld TAB_TEMP.ORDERS_TOTAL in der Zeile mit der ORDERNR der Einzelbestellung ein.
Das funktioniert aber leider nicht, da das SUBSELECT mehr als 1 Eintrag zurückliefert.
Beispiel:
Tabelle ORDERS Auszug:
ORDERNR|ORDERS_FROM|PAID|SUB_ORDER|...
4711|NULL|0|1|...
4712|NULL|0|1|...
5001|NULL|0|1|...
6001|NULL|0|0|...
6002|NULL|0|1|...
6003|NULL|0|1|...
8003|[ORDERS]4711,4712,5001|1|0|...
9000|[ORDERS]6002,6003|1|0|...
Ziel
Tabelle TAB_TEMP (Auszug):
ORDERNR|ORDERS_TOTAL|PAID_TOTAL|
4711|8003|1|...
4712|8003|1|...
5001|8003|1|...
6002|9000|1|...
6003|9000|1|...
Anschließend möchte ich bei den Einzelbestellungen den Wert PAID gemäß der Gesamtbestellung setzen. Kann mir jemand Tipps geben?
ich sitze an einer (für mich) kniffligen Aufgabe: ich habe 1 Tabelle ORDERS mit Bestellungen, deren Primärschlüssel das Feld ORDERNR ist.
Nun gibt es fachlich die Möglichkeit mehrere Einzelbestellungen zu einer Gesamtbestellung zusammenzufassen, sodass in derselben Tabelle ein weiterer Eintrag mit neuer ORDERNR angelegt wird. In einer weiteren Spalte ORDERS_FROM werden dabei die beteiligten ORDERNR der Originalbestellungen kommasepariert eingetragen, bspw." [ORDERS] 4711, 4712, 5001".
Da die Logik des Programms nur noch auf dem Datensatz der zusammengefassten Gesamtbestellung arbeitet, möchte ich sich ändernde Attribute auch an den Einzelbestellungen vermerken.
Ich hatte mir dazu folgendes überlegt:
Ich lege eine neue Tabelle TAB_TEMP an, in die ich zunächst die ORDERNR der Einzelbestellungen als Primärschlüssel hinterlege, die zu einer Gesamtbestellung zusammengefasst worden sind (die bekomme ich über ein gesetztes Flag bei der Einzelbestellung raus).
Jetzt würde ich am liebsten so etwas sagen wie "nimm aus der Tabelle TAB_TEMP Zeile für Zeile die jeweilige TAB_TEMP.ORDERNR und liefere die ORDERS.ORDERNR zurück, die TAB_TEMP.ORDERNR enthält, quasi
...
WHERE ORDERS_FROM LIKE ('%'|| (SELECT ORDERNR FROM TAB_TEMP)||'%')
...
und füge die ORDERS.ORDERNR der Gesamtbestellung in das Feld TAB_TEMP.ORDERS_TOTAL in der Zeile mit der ORDERNR der Einzelbestellung ein.
Das funktioniert aber leider nicht, da das SUBSELECT mehr als 1 Eintrag zurückliefert.
Beispiel:
Tabelle ORDERS Auszug:
ORDERNR|ORDERS_FROM|PAID|SUB_ORDER|...
4711|NULL|0|1|...
4712|NULL|0|1|...
5001|NULL|0|1|...
6001|NULL|0|0|...
6002|NULL|0|1|...
6003|NULL|0|1|...
8003|[ORDERS]4711,4712,5001|1|0|...
9000|[ORDERS]6002,6003|1|0|...
Ziel
Tabelle TAB_TEMP (Auszug):
ORDERNR|ORDERS_TOTAL|PAID_TOTAL|
4711|8003|1|...
4712|8003|1|...
5001|8003|1|...
6002|9000|1|...
6003|9000|1|...
Anschließend möchte ich bei den Einzelbestellungen den Wert PAID gemäß der Gesamtbestellung setzen. Kann mir jemand Tipps geben?