[MS Access] Tabellen zusammenführen und doppelte Einträge löschen



  • Hi,
    ich habe in einer Db zwei Tabellen mit identischem Aufbau, jedoch teilweise mit gleichem Inhalt. Wie kann ich diese Tabellen zu einer zusammenführen und halt die doppelten Einträge löschen? (d.h., dass diese nur noch einmal vorhanden sind)

    Gartenzwerg



  • Vorher die datei aber noch sichern falls was schief gehen sollte.

    INSERT INTO Tabelle1
    SELECT text // alle Spalten angeben die du übertragen willst
    FROM Tabelle2
    WHERE Tabelle2.text NOT IN(SELECT text FROM Tabelle1); // Eine Spalten angeben die 
    //gleich ist und nicht übertragen werden sollen
    


  • leider kenne ich mich mit MS Access nicht besonders gut aus, da ich es erst wenige Tage benutzen muss. Kann ich da solche Befehle überhaupt ausführen? Wenn ja, wo und wie?
    Des Weiteren glaube ich, dass ein kleines Mißverständnis vorliegt.

    Ich habe zwei Tabellen mit folgendem Aufbau:

    Name, Vorname, Adresse
    

    die sehen z.B. so aus:
    Tabelle 1:

    Mustermann, Hans, Musterstraße 1
    Musterfrau, Bärbel, Musterstraße 2
    

    Tabelle 2:

    Mustermann, Hans, Musterstraße 1
    Musterschüler, Fritz, Musterstraße 3
    

    diese Tabellen sollen zu einer Tabelle mit dem Inhalt:

    Mustermann, Hans, Musterstraße 1
    Musterfrau, Bärbel, Musterstraße 2
    Musterschüler, Fritz, Musterstraße 3
    

    zusammengeführt werden. Ist dies möglich?

    Gartenzwerg



  • Mein Statment oben fügt die zwei Tabellen zusammen. Man muss nur ein wenig die Daten ändern die übertragen werden sollen.
    Es gibt bei den Objekten (wo man neue Tabellen anlegen kann) links ein Objekt namens abfragen. Dies musst du auswählen und dann in der Symbolleiste oben auf SQL klicken.
    Als alternative könnte ich dir auch anbieten dir die Daten zusammen zu fügen. Bräuchte dann halt nur die Datei



  • Die Datei kann ich dir leider nicht geben, da dass sensible Daten sind.
    Habe es jetzt so:

    INSERT INTO [SFV-Mitgliederliste] ( Anrede, Titel, Name, Vorname, PLZ, Ort, Strasse )
    SELECT Verteilerliste.Anrede, Verteilerliste.Titel, Verteilerliste.Name, Verteilerliste.Vorname, Verteilerliste.PLZ, Verteilerliste.Ort, Verteilerliste.Strasse
    FROM Verteilerliste
    WHERE (((Verteilerliste.Name) Not In ([SFV-Mitgliederliste].[Name])));
    

    Wenn ich jetzt auf die entsprechende Abfrage klicke, fragt er mich, ob ich die entsprechende Anzahl Datensätze anhängen möchte. Nach einer Bestätigung führt er die Tabellen zusammen, jedoch löscht er die doppelten Einträge nicht. Kann das daran liegen, dass die Tabellen nicht identisch sind, d.h. sie sehen so aus:
    Tabelle 1:

    Anrede, Titel, Name, Vorname, PLZ, Ort, Strasse, Eintrittsdatum, Bemerkungen
    

    Tabelle 2:

    Anrede, Titel, Name, Vorname, PLZ, Ort, Strasse
    

    Wenn das Löschen doppelte EInträge funktionieren würde, müsste ich bei WHERE noch mehr Spalten angeben können (Name, Vorname), da wir auch Personen mit identischen Nachnamen in der Liste haben.

    Gartenzwerg



  • Nach welchen Kriterien gehst du???
    Wann dürfen die Daten aus der Tabelle2 in die Tabelle1 übertragen werden und wann nicht???



  • Daten aus Tabelle 2 sollen in die erste Tabelle übertragen werden, wenn sie in der Tabelle 1 noch nicht vorkommen, d.h. die Werte aus "Tabelle2.Name" und "Tabelle2.Vorname" dürfen noch nicht in Tabelle 1 stehen. Sollten "Tabelle1.Name" und "Tabelle1.Vorname" mit "Tabelle2.Name" und "Tabelle2.Vorname" übereinstimmen, sollen diese nicht mehr in Tabelle 1 übernommen werden, damit es zu keiner Verdoppelung kommt. Genauer?

    Gartenzwerg



  • OK, hab hier ein Statment das du verwenden kannst.
    Bitte trotzdem vorher von der Accessdatei ein Backup machen falls was schief laufen sollte.
    Hier das Statment...

    INSERT INTO Tabelle1
    SELECT Tabelle2.Anrede AS Anrede, Tabelle2.Titel AS Titel, Tabelle2.name AS name, Tabelle2.vorname AS vorname, Tabelle2.plz AS plz, Tabelle2.ort AS ort, Tabelle2.strasse AS strasse
    FROM Tabelle2
    WHERE name  NOT IN (SELECT name FROM Tabelle1) AND vorname NOT IN (SELECT vorname FROM Tabelle1);
    


  • @guenni
    Ich glaube nicht, dass das so hinhaut, wie du dir das vorstellst.

    Beispiel, wo es schief laufen dürfte:

    Tabelle 1
    
    Hans, Meier, ...
    Peter, Gruber, ...
    
    Tabelle 2
    
    Hans, Gruber, ...
    

    Da der Vorname Hans und auch der Nachname Gruber in der Tabelle 1 vorkommen, wird der arme Hans Gruber aus Tabelle 2 nicht in die Tabelle 1 übernommen.



  • @AJ
    Stimmt, den Effekt habe ich gar nicht mitberechnet.
    Hättest du eventuell ne Idee die funktioniert???



  • INSERT INTO Tabelle1
    SELECT Tabelle2.Anrede AS Anrede, Tabelle2.Titel AS Titel, Tabelle2.name AS name, Tabelle2.vorname AS vorname, Tabelle2.plz AS plz, Tabelle2.ort AS ort, Tabelle2.strasse AS strasse
    FROM Tabelle2
    WHERE SELECT Tabelle2.name AS name, Tabelle2.vorname AS vorname
    FROM Tabelle2
    WHERE name+vorname  NOT IN (SELECT name+vorname FROM Tabelle1);
    

    Das müsste funktionieren



  • Funkioniert dies (name+vorname) bei Access???

    INSERT INTO Tabelle1
    SELECT Tabelle2.Anrede AS Anrede, Tabelle2.Titel AS Titel, Tabelle2.name AS name, Tabelle2.vorname AS vorname, Tabelle2.plz AS plz, Tabelle2.ort AS ort, Tabelle2.strasse AS strasse
    FROM Tabelle2
    WHERE name+vorname  NOT IN (SELECT name+vorname FROM Tabelle1);
    

    Sollte dann auch funktionieren



  • ok, danke letzteres funktioniert wunderbar.
    Eine Frage habe ich dennoch, wie kann ich aus denn beiden Tabellen eine dritte erzeugen? D.h. die Abfrage soll laufen wie die jetztige, jedoch soll die Daten nicht an Tabelle1 angehängt werden, sondern in Tabelle 3 zusammengeführt werden. Im Moment mache ich ein Kopie von Tabelle 1 per Hand und füge über die oben gezeigte Abfrage die entsprechenden Datensätze der Tabelle 1 in die Kopie ein. Aber das geht doch bestimmt automatisch oder?

    Gartenzwerg



  • Oh ja so is noch kürzer ^^"

    und das mit dem + geht nur in access... is kein ANSI SQL soweit ich weiss..

    Ich denke da musst du 2 Querys für machen...



  • keiner eine Idee?



  • Wieso willst du alles in Tabelle3 haben. Wenn du die Daten zusammengefügt hast, kannst du ja mit der Tabelle1 weiterarbeiten. Ansonsten musst du mit 2 Statments arbeiten.
    Das erste:

    SELECT * INTO Tabelle3 FROM Tabelle1;
    

    Und die zweite ist dann die selbe wie oben, außer das du beim Insert die Tabelle3 angibst.


Anmelden zum Antworten