PDA

View Full Version : Zwei Tabellen vergleichen und erste Aktualisieren



Seiten : [1] 2

Matthias182
29-02-08, 10:30
Hallo,

ich brauche mal wieder ein wenig gedankliche Unterstützung.

Ich versuche ein Vorgehen zu entwickeln, um verlässlich Daten von einer Datei in eine andere Datei zu schreiben.

Ich versuche das mal an einem Beispiel zu erklären:

Ich habe zwei Tabellen:

Haupttabelle:
1. Feld 2. Feld 3. Feld 4. Feld
A B C D


Updatetabelle:
1. Feld 2. Feld 3. Feld 4. Feld
A B G H
W X Y Z

Nun erwarte ich folgendes Vorgehen / Ergebnis von meiner Lösung.

Der 2. Datensatz in der Updatetabelle wird in die erste Tabelle geschrieben, also neu angelegt.

Aus dem 1. Datensatz der Updatetabelle werden die Werte in den ersten Datensatz der Haupttabelle geschrieben, die sich unterscheiden.

Die Haupttabelle wird also im Ergebnis der Updatetabelle entsprechen. Dabei kann es jedoch sein, dass die Haupttabelle einige 1000
Datensätze enthält. Der Schlüssel ist für beide Tabellen das 1. Feld.

Am liebsten wäre mir eine Lösung per SQL, aber hier bedarf es wohl noch etwas mehr Aufwand.

Für ein wenig Hilfe wäre ich sehr dankbar.


Gruß

Matthias

Matthias182
29-02-08, 10:33
Vielleicht noch zur Info, ich kann leider nur mit CL und interaktivem SQL umgehen.

QMQRY in CL integrieren schaffe ich auch noch.

Fuerchau
29-02-08, 10:44
Hierfür sind 2 verschiedene SQL's erforderlich, da SQL keinen UpdateInsert kennt.

1.
Update filea a
set a.f2 = (select b.f2 from file b where a.f1=b.f1)
where a.f1 in (select b.f1 from file b)

2.
insert into file a
select f1, ... from file b
where b.f1 not in (select c.f1 from file c)


PS:
Mit meinem SQLCPY geht so was spielend leicht ;)

Matthias182
29-02-08, 10:50
Kannst du mir noch ein paar Infos zu dem SQLCPY geben?

Fuerchau
29-02-08, 11:52
Nunja, in der F1-Hilfe ist eigentlich alles erklärt (nach Installation).

Aber das wesentliche findest du hier:
Software (http://www.fuerchau.de/sql.htm)

Matthias182
29-02-08, 14:19
Hallo,

ich habe jetzt mal einen ersten SQL gebaut, der das Einfügen in Abhängigkeit von einer anderen Tabelle erledigt. Ist noch etwas erweitert zu der obigen Anforderung, aber es tut das, was ich erwarte.

INSERT INTO &RELEASE/&FILE
SELECT * FROM &FILE
WHERE &FILE.&FIELD in (Select &FIELD from CFWRLSSET/&FILE)

Leider erhalte ich nach der für mich scheinbar korrekten Ausführung folgenden Fehler im Joblog:

No query data to SAVE.
SAVE DATA command ended due to error.
STRQMQRY command failed.


Weiß jemand, was da nicht stimmt?

Fuerchau
29-02-08, 14:47
Hast du die ganzen Variablen auch korrekt gefüllt ?

Matthias182
29-02-08, 15:00
ja, er führt ja die komplette Aktion auch wie erwartet aus. Also die Daten werden entsprechend der Selektion in die Zieldatei geschrieben.

Fuerchau
29-02-08, 17:44
Wenn du keine Daten erwartest, also keinen Select verwendest, musst du OUTPUT(*) lassen.
Mit einer anderen Angabe kommt dieser Fehler, da du ja keine Ausgabe-Daten produzierst.

Matthias182
05-03-08, 10:45
Hallo,

ich versuche meine Lösung noch ein wenig zu erweitern und möchte dazu einen SQL bauen, der das Update auf verschiedene Files machen kann, unabhängig von der Anzahl der Felder. So könnte ich dies als eine Art Modul verwenden und muss es nicht für jede Datei individuell aufbauen.



1.
Update filea a
set a.f2 = (select b.f2 from file b where a.f1=b.f1)
where a.f1 in (select b.f1 from file b)


Der SQl sollte dabei etwas so aussehen, wie schon vorgeschlagen, aber mit mehreren SET statements. Das Problem für mich ist nun aber, ich weiß nie wie viele Felder die Tabelle haben kann. Lediglich das Maximum kann ich benennen.

Hat jemand eine Idee, wie ich das machen könnte?

Vielen Dank.

Matthias