Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

MS Access/SQL: INSERT mit UNION SELECT. Wie?

d-oli / 5 Antworten / Baumansicht Nickles

Hi,

Folgende UNION-Abfrage mit MS Access 2000 funktioniert:

SELECT * FROM Tabelle1
UNION SELECT * FROM Tabelle2;

Auch folgende Einfüge-Abfrage funktioniert:

INSERT INTO Tabelle3
SELECT * FROM Tabelle1;

Aber eine Einfüge-Abfrage kombiniert mit einer UNION-Abfrage scheint nicht zu funktionieren:

INSERT INTO Tabelle3
SELECT * FROM Tabelle1
UNION SELECT * FROM Tabelle2;

Die Fehler-Meldung "Syntaxfehler in FROM-Klausel" erscheint. Nach dem Klicken von OK wir "UNION" selektiert.

Was ist falsch?

Dank und Gruss, d-oli

Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
Andreas42 d-oli „MS Access/SQL: INSERT mit UNION SELECT. Wie?“
Optionen

Hi!

Ich würde vermuten, dass im ersten Select die Definition von Tabelle3 und 1 identisch ist (sie also die gleichen Felder besitzen).

Beim zweiten Select wird das nicht der Fall sein, wenn sich die Definitionsn von Tabelle1 und drei nicht geändert haben (wobei ich jetzt auch nicht wiess, wie man den INSERT von der Syntax her aufbauen muss, um den Feldern von Tabelle3 ausgewählte Inhalte aus Tabelle 1 bzw 2 zuzuordnen).

Ich hoffe, dass ich nicht total falsch liege.

Bis dann
Andreas

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen
d-oli Andreas42 „Hi! Ich würde vermuten, dass im ersten Select die Definition von Tabelle3 und 1...“
Optionen

Hmmm ...
Tabelle 1-3 sind identisch.
Ich denke, dass es nicht möglich ist INSERT mit UNION zu kombinieren. Das Problem ist folgendes:

2 identische Tabellen ( Tabelle 1 + 2 ) mit gleichen und unterschiedlichen Daten, sollen in einer Tabelle zusammengefasst werden.
D.h.
- Gleiche Datesätze sollen in der neuen Tabelle ( Tabelle 3 ) nur einmal abgebildet werden
- Ungleiche Datesätze sollen in der neuen Tabelle ebefalls abgebildet werden

Da ich denke, dass INSERT kombiniert mit UNION nicht funktioniert, werde ich wohl zwei INSERT- Abfragen machen müssen. Eine die Tabelle 1 in Tabelle 3 Kopiert und die andere, die die ungleichen Daten (verglichen mit Tabelle 3 ) aus Tabelle 2 in Tabelle 3 schreibt.

In einem SQL-Statement wird dies ja wohl kaum möglich sein. Oder?

Gruss, d-oli

Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
Andreas42 d-oli „Hmmm ... Tabelle 1-3 sind identisch. Ich denke, dass es nicht möglich ist...“
Optionen

Hi!

Soweit ich verstehe sollte es eigentlich so möglich sein, wie du das geplant hattest. Wenn's nicht will, dann eben Plan B. ;-)

Ich kann das nicht überprüfen (ich arbeite mit einem embedded SQL, dass nur Datensatzweise funktioniert und UNION nicht kennt).

Fehlt eventuell nur eine Klammer? Oder müssen hier alle Feldnamen in den Selects explizit angegeben werden, damit das Zusammenführen funktioniert? (select feld1, feld2, usw from tabelle1)

Bis dann
Andreas

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen
d-oli Andreas42 „Hi! Soweit ich verstehe sollte es eigentlich so möglich sein, wie du das...“
Optionen

Na dann eben Plan B ... hehe ...

Habe Plan A mit expliziten Feldnamen, Klammer und anderem probiert. Will einfach nicht funktionieren. Habe auch im FM (letzte zwei Buchstaben von RTFM)keine weitere Hilfe gefunden.

Hauptsache es funzt.

Dank und Gruss, d-oli

Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
Enrico_Horn d-oli „MS Access/SQL: INSERT mit UNION SELECT. Wie?“
Optionen

Schon mal so probiert?

INSERT INTO Tabelle3
( SELECT * FROM Tabelle1 UNION SELECT * FROM Tabelle2);

In Oracle geht so was.

bei Antwort benachrichtigen