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



  • 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