Hallo Thomas und danke für deine Antwort!
Zunächst mal die zusätzlichen Informationen.
Create Code:
CREATE TABLE `Demotable` (
`Vorgang` VARCHAR(1) NOT NULL DEFAULT '' COLLATE 'latin1_bin',
`Nummer` VARCHAR(11) NOT NULL DEFAULT '' COLLATE 'latin1_bin',
`Auftrag` VARCHAR(11) NULL DEFAULT NULL COLLATE 'latin1_bin',
`Bestellung1` VARCHAR(11) NULL DEFAULT NULL COLLATE 'latin1_bin',
PRIMARY KEY (`Vorgang`, `Nummer`)
)
COLLATE='latin1_bin'
ENGINE=InnoDB;
Inserts:
INSERT INTO `demotable` (`Vorgang`, `Nummer`, `Auftrag`, `Bestellung1`) VALUES ('A', '10000000000', '10000000000', '60000000000');
INSERT INTO `demotable` (`Vorgang`, `Nummer`, `Auftrag`, `Bestellung1`) VALUES ('A', '10000000001', '10000000001', '60000000001');
INSERT INTO `demotable` (`Vorgang`, `Nummer`, `Auftrag`, `Bestellung1`) VALUES ('D', '30000000000', '10000000000', '60000000003');
INSERT INTO `demotable` (`Vorgang`, `Nummer`, `Auftrag`, `Bestellung1`) VALUES ('D', '30000000001', '10000000001', '000');
INSERT INTO `demotable` (`Vorgang`, `Nummer`, `Auftrag`, `Bestellung1`) VALUES ('D', '30000000002', '10000000001', '60000000001');
INSERT INTO `demotable` (`Vorgang`, `Nummer`, `Auftrag`, `Bestellung1`) VALUES ('P', '40000000000', '10000000000', '');
Wie schon eingangs beschrieben, können zu jedem Auftrag beliebig viele Folgevoränge existieren. Erkennbar an "Vorgang". "A" = "Auftrag", "D" = "Direktrechnung", "P" = "Proformarechnung", usw.
Die Folgevorgänge kennen "Ihren" Auftrag durch das Feld "Auftrag".
Nun muss es per Anforderung so sein, dass jeder Folgevorgang im Feld "Bestellung" die gleiche Angabe hat wie sein Auftrag.
Leider schleichen sich Fehler ein und die möchte ich per Update korrigieren.
Das sind Demodaten.
Die echten Daten leben, täglich kommen Aufträge und Vorgänge hinzu und immer wieder sind "Bösewichte" dabei.
Daher suche ich nach einer generischen Methode die diese Aufgabe erledigt.
Ich bin relativ neu bei mySQL und denke bestimmt noch zu sehr im klassischen Programmieren.
Dort würde ich "select distinct auftrag, bestellung from demotable where vorgang = 'A'" schreiben.
Und dann eine Schleife die für jeden Record/Auftrag "update demotable set bestellung = VariableBestellungAusErstemRecordset where auftrag = VariableAuftragAusErstemRecordset and vorgang <> 'A'".
Natürlich suche ich nach einem SQL Statement! ;-)
Viele Grüße,
Heiko
Edited 2 time(s). Last edit at 02/20/2012 06:01AM by Heiko Augustin.