![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: UniDac
Tabellen vergleichen und Änderungen übernehmen
Hallo Zusammen,
zu dem Thema gibt es zwar viel, wenn man die Suche bemüht, aber ich habe leider trotzdem noch keineLösung gefunden und bitte EUch daher um Hilfe. Ich habe zwei Tabellen, die von der Struktur exakt identisch sind. In diesen Tabellen sind Auftragsdaten von Produktionsaufträgen enthalten. Diese Daten kommen aus einer Abfrage aus unserem ERP-System. Die eine Tabelle heißt Auftrag und das ist die Tabelle, mit der der User arbeitet. Die andere Tabelle heißt AuftragTEMP und wird nur während des Update-Prozesses verwendet. Nach dem Update-Prozess ersetzen die Daten von AuftragTEMP die Daten aus Auftrag. So viel zum Hintergrund - das klappt alles wunderbar. Jetzt zu meinem Problem Manche Daten können von den Usern geändert werden und müssen in die Tabelle AuftragTEMP übernommen werden. Dazu hätte ich gerne eine SQL-Anweisung, weiß aber leider nicht, wie ich diese aufbauen muss. Hier mal ein Beispiel, wie die Daten aussehen können: Tabelle Auftrag AuftragsNr Arbeitsgang Rückmeldedatum 4711000 AG000000001 20130110 4711000 AG000000002 20130110 4711000 AG000000003 20130111 4711000 AG000000004 20130113 4711000 AG000000005 20130115 4711000 AG000000006 4711000 AG000000007 4711000 AG000000008 Tabelle AuftragTEMP AuftragsNr Arbeitsgang Rückmeldedatum 4711000 AG000000001 20130110 4711000 AG000000002 20130110 4711000 AG000000003 20130111 4711000 AG000000004 20130113 4711000 AG000000005 HIER SOLL DAS ROTE DATUM EINGEFÜGT WERDEN 4711000 AG000000006 4711000 AG000000007 4711000 AG000000008 Das rote Rückmeldedatum soll aus Tabelle Auftrag in Tabelle AuftragTEMP übernommen werden. Die Tabellen enthalten ungefähr 60.000 Datensätz. Die Datensätze sind nicht 100% identisch, soll heißen, dass in der Tabelle AuftragTEMP die fertig gewordenen Aufträge nicht mehhr enthalten sind und das neue Aufträge mit aufgenommen sind, die in der Tabelle Auftrag noch nicht enthalten sind. Ich hoffe, dass ich das Problem nachvollziehbar beschrieben habe und das Ihr mir helfen könnt. Vielen Dank Patrick |
AW: Tabellen vergleichen und Änderungen übernehmen
Die SQL Befehle dazu wären except, intersect, minus...
sollte innerhalb einer DB kein Problem sein. Welche von den 3 oben bei MySQL dabei sind, weiß ich nicht genau / versionsabhängig. |
AW: Tabellen vergleichen und Änderungen übernehmen
Hallo jobo,
leider gibte es alle drei Befehle nicht in MySQL. Ich hatte es selber mal versucht aufzubauen, aber ich ich kam schon mit dem Update-Part nicht zurecht...
Delphi-Quellcode:
Update AuftragTEMP set Rückmeldedatum=??? //Das ist ja für jeden Auftrag anders...
where (AuftragsNr, Arbeitsgang) in ( Select Auftrag, Arbeitsgang from Auftrag where Rueckmeldedatum<>'0000-00-00 00:00:00') Selbst wenn ich eine Möglichkeit hätte, alle vorhanden Rückmeldedatums (Rückmeldedaten kommt mir irgendwie nicht über die Finger), egal ob sie in AuftragTEMP schon vorhanden sind oder nicht, upzudaten, würde mir das helfen. Hat jemand da eine Idee für mich? Vielen Dank Patrick Ich habe zwischenzeitlich eine SQL-Anweisung gefunden, die vielversprechend aussieht, die ich aber nicht ans Laufen bekomme:
Delphi-Quellcode:
UPDATE
Auftragtemp AS u LEFT JOIN (SELECT AuftragsNr, Arbeitsgang, Rueckmeldedatum FROM Auftrag) AS o ON u.Primary = o.Primary SET u.Rueckmeldedatum = o.Rueckmeldedatum Ich habe noch nir mit einem Primary Key gearbeitet. Er setzt sich aus den Spalten Auftrag und Arbeitsgang zusammen. Wenn ich das ganze ohne Primary versuche sieht das so aus:
Delphi-Quellcode:
Hier bekomme ich die Fehlermedung: Data truncated for column 'Rueckmeldedatum' at row 1
UPDATE
AuftragTEMP AS u LEFT JOIN (SELECT AuftragsNr, Arbeitsgang, Rueckmeldedatum FROM Auftrag) AS o ON (u.AuftragsNr, u.Arbeitsgang) = (o.AuftragsNr, o.Arbeitsgang) SET u.Rueckmeldedatum = o.Rueckmeldedatum Ist das etwas, was zur Lösung führen könnte? Vielen Dank Patrick |
AW: Tabellen vergleichen und Änderungen übernehmen
Zitat:
![]() Zitat:
|
AW: Tabellen vergleichen und Änderungen übernehmen
Hallo Zusammen,
ich glaube ich habe es gelöst... Hier meine Procedure:
Delphi-Quellcode:
Gruß
Query.SQL.Clear;
Query.SQL.Add('UPDATE as400temp SET as400temp.OARMDA = '); Query.SQL.Add('(SELECT OARMDA FROM as400 '); Query.SQL.Add('WHERE as400.WAAUNR=as400temp.WAAUNR AND '); //Primary Key Query.SQL.Add('as400.WAAUPO=as400temp.WAAUPO AND '); //Primary Key Query.SQL.Add('as400.OAAGNR=as400temp.OAAGNR AND '); //Primary Key Query.SQL.Add('as400.OARMDA<> :Datum) '); //0-Datum aus as400 nicht berücksichtigen Query.SQL.Add('where as400temp.OARMDA= :Datum '); //Nur die 0-Datums aus as400temp updaten Query.ParamByName('Datum').AsString:='0000-00-00'; Query.Execute; Patrick |
AW: Tabellen vergleichen und Änderungen übernehmen
Hallo jobo,
vielen Dank für Deine Mühe. Die Anforderung hat sich eigentlich nicht geändert: Zitat:
Muss noch aber noch ein bißchen getestet werden, aber die ersten Tests sahen gut aus... Vielen Dank Patrick |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz