online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon micky01 vom 13.03.2020, 13:39 Options

2 sql tablellen vergleichen

hallo,
ich habe tabelle 1 (t1) mit 120 attributen und tabelle 2 (t2) mit ebenfalls 120 attributen. gemeinsam haben t1 und t2 das attribut "key" mit identischem inhalt!!
jetzt möchte ich durch einen vergleich von beiden tabellen nur die abweichung mit "key" und dem(n) abweichenden attribut(en) angezeigt bekommen. die abweichenden attribute am besten nebeneinander.
wer kann mir da helfen?

micky01


Antwort schreiben

Antwort 1 von Marie vom 14.03.2020, 02:24 Options

Mach mal bitte ein Beispiel, ich verstehe nicht wirklich was Du meinst.

Gruß Marie

Antwort 2 von micky01 vom 14.03.2020, 09:55 Options

hallo marie,

hier ein beispiel:

attribut 1 attribut2 attribut120
tabelle1 schulz willi 0203-33
tabelle2 schulz marie 0203-31

gewünschte Anzeige vom Vergleich :
alle unterschiedlichen Atrribute sind anzuzeigen von tabelle1 und tabelle 2::
attribut2 attribut120
tabelle1 willi 0203-33
tabelle2 marie 0203-31

grüße

micky01

Antwort 3 von Marie vom 14.03.2020, 17:34 Options

was verstehst Du denn unter einem Attribut? Soll das ein tabellenfeld sein???

Und wenn in Feld 2 tabelle1 schulz willi steht und in tabelle2 schulz marie, wie stellst Du Dir dann vor, dass man die Hälfte des Feldinhaltes weglässt??

Also wohlgemerkt das geht schon, aber dann muss ich Dir Code schicken wo sämtliche Feldinhalte zeichenweise verglichen werden und bevor ich das tue muss ich genauer wissen was Du willst. und exakt wissen wie Deine felder und Tabellen heissen und wo und wie das Ergebnis ausgegeben oder gespeichert werden soll.

Also wenn ich das richtig verstanden habe hast Du wohl eine ziemlich vermurkste Datenbank.
Im übrigen vergleichst Du jetzt 2 datensätze nur miteinander, was wenn drei oder 5 denselben key haben?? Was soll denn dann ausgegeben werden, wenn D1 und D2 in einem Feld identisch sind, aber D4 nicht???

Gruß Marie

Antwort 4 von micky01 vom 15.03.2020, 16:45 Options

hallo marie,
danke für die nachricht.
leider sind die leerstellen verschwunden. ich habe sie mal durch "ö" ersetzt.
feld2 muss über schulz stehen und feld3 über dem jeweiligen vornamen..

öööööökey/
ööööööfeld1öööfeld2öööfeld3öööööööfeld120
tabelle1ö 1ööööschulzööwilliöööööööö0203-33
tabelle2ö 1ööööschulzöömarieöööööö0203-31


attribut = feld.
es gibt immer 2 tabellenzeilen mit identischem key.

grüße
micky01

Antwort 5 von Marie vom 16.03.2020, 06:21 Options

Also Du hast allen ernstes 120 felder in einer einzigen Tabelle ?

Du willst 2 im Prinzip identische Tabellen vergleichen und die Unterschiede in eine neue Tabelle schreiben?

Also ich kann Dir Code schreiben, der alle 120 Felder einzeln nacheinander durchsucht und alle Datensätze. Wenn Du das öfter brauchst, dann probier mal ob das überhaupt geht, dass Du 120 Felder so anzeigst:

SELECT Tbl1.ID, IIf([Tbl1]![Feld1]<>[Tbl2]![Feld1],"Tbl1: " & [Tbl1]![Feld1] & " <> Tbl2: " & [Tbl2]![Feld1],"") AS DiffFeld1, IIf([Tbl1]![Feld2]<>[Tbl2]![Feld2],"Tbl1: " & [Tbl1]![Feld2] & " <> Tbl2: " & [Tbl2]![Feld2],"") AS DiffFeld2, IIf([Tbl1]![Feld3]<>[Tbl2]![Feld3],"Tbl1: " & [Tbl1]![Feld3] & " <> Tbl2: " & [Tbl2]![Feld3],"") AS DiffFeld3
FROM Tbl1 INNER JOIN Tbl2 ON Tbl1.ID = Tbl2.ID
WHERE (((IIf([Tbl1]![Feld1]<>[Tbl2]![Feld1],"Tbl1: " & [Tbl1]![Feld1] & " <> Tbl2: " & [Tbl2]![Feld1],""))<>"")) OR (((IIf([Tbl1]![Feld2]<>[Tbl2]![Feld2],"Tbl1: " & [Tbl1]![Feld2] & " <> Tbl2: " & [Tbl2]![Feld2],""))<>"")) OR (((IIf([Tbl1]![Feld3]<>[Tbl2]![Feld3],"Tbl1: " & [Tbl1]![Feld3] & " <> Tbl2: " & [Tbl2]![Feld3],""))<>""));


Tabelle1 habe ich tbl1 genannt usw, der Code zeigt Dir alle nicht identischen Datensätze an und lässt die Felder leer, die identisch sind.

Habe noch etwas gefunden, falls es Dir zu umständlich ist obigen Code auf 120 felder einzutragen :

Zitat:
Es gibt von Smarttools ein Programm: Synchronizer. Damit kannst Du Tabellen vergleichen und alle Unterschiede oder fehlende Zeilen und Spalten farblich markieren. Dieses Programm ist toll.


Gruß Marie

Antwort 6 von Marie vom 16.03.2020, 06:52 Options

SELECT T1.Key, IIf([T1]![F1]<>[T2]![F1],"T1: " & [T1]![F1] & " <> T2: " & [T2]![F1],"") AS NeuF1, IIf([T1]![F2]<>[T2]![F2],"T1: " & [T1]![F2] & " <> T2: " & [T2]![F2],"") AS NeuF2, IIf([T1]![F3]<>[T2]![F3],"T1: " & [T1]![F3] & " <> T2: " & [T2]![F3],"") AS NeuF3
FROM T1 INNER JOIN T2 ON T1.Key = T2.Key
WHERE (((IIf([T1]![F1]<>[T2]![F1],"T1: " & [T1]![F1] & " <> T2: " & [T2]![F1],""))<>"")) OR (((IIf([T1]![F2]<>[T2]![F2],"T1: " & [T1]![F2] & " <> T2: " & [T2]![F2],""))<>"")) OR (((IIf([T1]![F3]<>[T2]![F3],"T1: " & [T1]![F3] & " <> T2: " & [T2]![F3],""))<>""));


Hier nochmal etwas übersichtlicher: Statt vorher ID habe ich jetzt Key genannt, so wie Du, dann die beiden Tabellen jetzt T1 und T2, Deine Attribute sind Tabellenfelder, heissen jetzt F1, F2 und F3 (musste dann weiterführen bis 120), die neuen Vergleichsfelder heissen NeuF1, NeuF2 und NeuF3. Der Eintrag heisst dann:

'Key     NeuF1                    NeuF2                       NeuF3
'1       T1: Maria <> T2: Marie
'3                                T1: Müller <> T2: Mueller


Wenn du den Where-Abschnitt weglässt, dann werden alle Datensätze angezeigt, auch die, die absolut identisch sind. Probier es aus, mach Dir einfach zwei identische Tabellen T1 und T2 mit den Feldern Key = Autwert und den Textfeldern F1, F2 und F3, dann kopierst Du obigen Code in eine Abfrage in das SQL-Fenster, dann siehst Du ja in der Entwurfsansicht, wie Du weitermachen musst.

Nochmal gruß Marie

Antwort 7 von micky01 vom 16.03.2020, 12:11 Options

danke marie! werde es mal unter der woche ausprobieren;besser ist es wohl bei wechselnden tabellen ein einigermaßen preiswerte software zu kaufen, die das per "knopfdruck" erledigt.

danke nochmals!
grüße
micky01

Ähnliche Themen

kommentare in sql datenbank
soad  04.01.2007 - 120 Hits -

sql laufwerk
micky01  21.02.2007 - 110 Hits -

SQL Variablen zuweisung
ichhabeinefrage  03.08.2007 - 256 Hits - 6 Antworten

Gesucht, Programm für Datenbank Modelierung
Dr.Ma-Busen  02.06.2008 - 102 Hits - 2 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026