klanax
Goto Top

Tabellen in Access zusammenführen

Hallo an alle!

Ich möchte mit MS-Access mindestens zwei Tabellen zu einer einzelnen zusammenführen.
Die Zieltabelle soll alle Daten der Ursprungstabellen enthalten.

Beispiel:

Tabelle1:
Stadt_in_Tabelle1
Karlsruhe
Stuttgart
München
Frankfurt

Tabelle2:
Stadt_in_Tabelle2
Hamburg
Berlin
Karlsruhe
Stuttgart

Wunschergebnis:
Tabelle3:
Stadt_in_Tabelle1......Stadt_in_Tabelle2
Karlsruhe......................Karlsruhe
Stuttgart.......................Stuttgart
München......................(leer)
Frankfurt.......................(leer)
(leer)...............................Hamburg
(leer)...............................Berlin

Besser kann ich es leider nicht darstellen face-smile

Karlsruhe und Stuttgart sind in beiden Tabellen enthalten und sollen daher in der Zieltabelle in einem Datensatz zusammengefasst werden.
München und Frankfurt bzw. Hamburg und Berlin sind jeweils nur in einer der Ursprungsdatenbanken vorhanden. Hier soll anstatt der fehlenden Stadt ein leeres Feld sein.

Ich habe mit UNION experimentiert, bin aber leider zu keinem Ergebnis gekommen.

Hat jemand eine Idee.

Danke schonmal im Voraus für eure Vorschläge.

Viele Grüße

klanax

Content-Key: 4101347446

Url: https://administrator.de/contentid/4101347446

Printed on: April 23, 2024 at 12:04 o'clock

Member: ukulele-7
ukulele-7 Sep 29, 2022 at 14:48:06 (UTC)
Goto Top
Tabelle 3 hat jetzt bei dir 2 Spalten, soll das so oder soll es einfach nur eine Tabelle wie bisher sein?

Access ist leider mehr eine Krücke, daher versuche ich es mal mit einfachsten mitteln:
INSERT INTO tabelle3
SELECT spalte FROM tabelle1
UNION ALL
SELECT spalte FROM tabelle2
WHERE spalte NOT IN (
SELECT spalte FROM tabelle1
);
Member: StefanKittel
Solution StefanKittel Sep 29, 2022 at 15:29:51 (UTC)
Goto Top
Hallo,

einfacher.
Du erstellst die neue Tabelle und definierst das Feld "Stadt" als "indiziert ohne Doppelte".
Dann erstellst Du eine Anfrage und fügst alle Einträge als Tabelle 1 hinzu.
Dann erstellst Du eine Anfrage und fügst alle Einträge als Tabelle 2 hinzu. Die, die bereits enthalten sind, werden nicht importiert.

Oder Du kopierst beide in eine Excel Tabelle und lässt Excel alls Dubletten löschen.

Stefan
Member: klanax
klanax Sep 29, 2022 at 15:44:32 (UTC)
Goto Top
Hallo ukulele-7!

Ja, die neue Tabelle soll tatsächlich zwei Spalten haben.
In der ersten sollen die Daten aus Tabelle1 stehen.
In der zweiten die Daten aus Tabelle2.
Und wo eine Stadt aus der jeweils anderen Tabelle fehlt, soll ein leeres Feld sein.

Ich habe deinen Code ausprobiert, erhalte aber die Fehlermeldung
"Syntaxfehler in FROM-Klausel"
Member: klanax
klanax Sep 30, 2022 at 06:10:09 (UTC)
Goto Top
Hallo Stefan,

ich habe die Lösung jetzt gefunden, sogar mit einem weiteren Feld.
Dein Vorschlag war ein guter Ansatz.

Meine Lösung:

SQL-Code aus Abfrage 1:
INSERT INTO Tabelle3 ( Stadt_in_Tabelle1, Wert_in_Tabelle1, Stadt_in_Tabelle2, Wert_in_Tabelle2 )
SELECT Tabelle1.Stadt_in_Tabelle1, Tabelle1.Wert_in_Tabelle1, Tabelle2.Stadt_in_Tabelle2, Tabelle2.Wert_in_Tabelle2
FROM Tabelle1 RIGHT JOIN Tabelle2 ON Tabelle1.Stadt_in_Tabelle1 = Tabelle2.Stadt_in_Tabelle2;

SQL-Code aus Abfrage 2:
INSERT INTO Tabelle3 ( Stadt_in_Tabelle1, Wert_in_Tabelle1, Stadt_in_Tabelle2, Wert_in_Tabelle2 )
SELECT Tabelle1.Stadt_in_Tabelle1, Tabelle1.Wert_in_Tabelle1, Tabelle2.Stadt_in_Tabelle2, Tabelle2.Wert_in_Tabelle2
FROM Tabelle1 LEFT JOIN Tabelle2 ON Tabelle1.Stadt_in_Tabelle1 = Tabelle2.Stadt_in_Tabelle2
WHERE (((Tabelle2.Stadt_in_Tabelle2) Is Null));

Vielen Dank für die Unterstützung!
Member: ukulele-7
ukulele-7 Sep 30, 2022 at 06:48:51 (UTC)
Goto Top
Du suchst dann einen FULL JOIN, den Access natürlich nicht nativ kann aber es geht:
https://dba.stackexchange.com/questions/14441/full-outer-join-in-ms-acce ...
Wichtig: UNION, nicht UNION ALL

INSERT INTO tabelle3(stadt1,stadt2)
SELECT tabelle1.stadt,tabelle2.stadt
FROM tabelle1
LEFT JOIN tabelle2 ON tabelle1.stadt = tabelle2.stadt
UNION
SELECT tabelle1.stadt,tabelle2.stadt
FROM tabelle2
LEFT JOIN tabelle1 ON tabelle1.stadt = tabelle2.stadt