Entwickler-Ecke
Datenbanken - Datenbanken vergleichen
Hazel - Fr 26.04.13 09:54
Titel: Datenbanken vergleichen
Hallo :)
hab ein kleines SQl Problem vill könnt ihr mir ja helfen.
Hab zwei Datenbank tabellen mit Daten die eine Tabelle enthält die 'alten' Daten die andere die neue.
Ich möchte jetzt einen Befehl schreiben der die Daten der alten Tabelle mit der neuen vergleicht gegebenfalls ändert oder
neue hinzufügt. Also der soll quasi schauen ob der Datensatz bereits existiert und wie bereits erwähnt ändern oder neu hinzufügen.
Habt ihr da eine Idee?
schonmal Danke im vorraus
Nersgatt - Fr 26.04.13 10:08
Welches Datenbanksystem?
Man kann z.B. fehlende Datensätze per SQL suchen:
SQL-Anweisung
1:
| SELECT ID FROM TABELLE2 T2 WHERE NOT EXISTS(SELECT ID FROM TABELLE1 T1 WHERE T1.ID = T2.ID) |
Oder ein Update von Daten geht in Firebird recht elegant mit UPDATE OR INSERT (ich glaub, ab Version 2.5):
SQL-Anweisung
1:
| UPDATE OR INSERT INTO TABELLE1 T1 (ID, BEZEICHNUNG) VALUES (1, 'BLA') MATCHING ID; |
Wenn in der Tabelle schon ein Datensatz mit der ID 1 existiert, wird ein Update mit der neuen Bezeichnung gemacht, andernfalls wird der Datensatz angelegt. Wenn das Feld ID der Primärschlüssel ist, kann man den Teil mit MATCHING weg lassen.
Sonst kann man auch sowas machen:
SQL-Anweisung
1:
| UPDATE OR INSERT INTO KUNDEN (NACHNAME, VORNAME, ORT) VALUES ('Müller', 'Heinz', 'Berlin') MATCHING NACHNAME, VORNAME |
Hazel - Fr 26.04.13 10:18
DbForge :)
also es ist so das die Daten in der 'alten' Tabelle anders aufgeteilt sind als in der 'neuen'.
Ich will quasi das der durchgeht. Soll den Datensatz aus der neuen nehmen anhand der Nummer suchen ob es die in der alten Tabellen schon gibt
wenn Ja dann vergleichen ob sie sich geändert hat wenn ja ändern. Wenn nicht existiert neu anlegen. Wenn sich nix geändert hat weiter gehen und mit dem nächsten
Datensatz weiter machen.
Soll ich es lieber in Delphi programmieren oder direkt im SQL?
Bin mir unsicher wie ich es umsetzten soll.
Nersgatt - Fr 26.04.13 10:30
Schneller wird es sein, wenn Du es in SQL machst. Leider sagt mir dbforge nichts, daher kann ich zu spezielle Sprachfeatures nichts sagen.
Aber generell würde ich es in der Art machen:
Nehmen wir die beiden Tabelle so an:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| Tabelle_Neu: ID BEZEICHNUNG NOCHEINFELD -------------------------------- 1 Bez 1 Bla 2 Bez 2 Blubb 3 Bez 3 Hollahü
Tabelle_Alt: ID BEZEICHNUNG NOCHEINFELD -------------------------------- 1 Bez Neu Hallo 2 Blubb Test 5 Bez 5 - |
1. Ergänzen der fehlenden Daten in Tabelle_Neu:
SQL-Anweisung
1: 2:
| INSERT INTO TABELLE_NEU (ID, BEZEICHNUNG, NOCHEINFELD) SELECT ID, BEZEICHNUNG, NOCHEINFELD FROM TABELLE_ALT TA WHERE NOT EXISTS(SELECT ID FROM TABELLE_NEU TN WHERE TN.ID = TA.ID); |
Tabelle_Neu sieht jetzt so aus:
Quelltext
1: 2: 3: 4: 5: 6:
| ID BEZEICHNUNG NOCHEINFELD -------------------------------- 1 Bez 1 Bla 2 Bez 2 Blubb 3 Bez 3 Hollahü 5 Bez 5 - |
2. Update der Daten:
SQL-Anweisung
1: 2: 3: 4:
| UPDATE TABELLE_NEU TN SET BEZEICHNUNG = (SELECT BEZEICHNUNG FROM TABELLE_ALT TA WHERE TA.ID = TN.ID), NOCHEINFELD = (SELECT NOCHEINFELD FROM TABELLE_ALT TA WHERE TA.ID = TN.ID), WHERE EXISTS(SELECT ID FROM TA WHERE TA.ID = TN.ID); |
Ergebnis:
Quelltext
1: 2: 3: 4: 5: 6:
| ID BEZEICHNUNG NOCHEINFELD -------------------------------- 1 Bez Neu Hallo 2 Blubb Test 3 Bez 3 Hollahü 5 Bez 5 - |
Hab jetzt alles aus dem Kopf getippt, aber im Prinzip müsste es so funktionieren.
Hazel - Fr 26.04.13 10:48
danke super lieb von dir :)
probiere es mal aus und melde mich falls ich noch hilfe benötige (was sicher der fall sein wird :D)
Hazel - Fr 26.04.13 11:07
also habs ausprobiert funktioniert bei mir nicht weil
meine 2 tabellen verschieden augebaut sind
bsp:
Tabelle 1:
Name Vorname Straße
Tabelle 2
Strasse Vorname Nachname Ort
jetzt als grobes beispiel also muss ich noch zuweisen welches feld zu welches passt :)
Kannst mir da nochmal helfen? :)
Nersgatt - Fr 26.04.13 11:10
Hast Du die SQL-Befehle verstanden, die ich Dir oben gepostet hast? Du musst doch nur noch die Feldnamen Deinen Gegebenheiten anpassen.
Hazel - Fr 26.04.13 11:12
sorry hab es erstmal nur versucht eine SELECT abfrage zu basteln und hab dabei mist gebaut^^
habs gerade versucht kommt ein fehler aber der hat was mit meiner Datenbank zutun werd mich mal dran setzten :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!