Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

INSERT INTO mit UNION-Abfragen

Union-Abfragen dienen dazu, die Daten mehrerer gleichartiger Tabellen oder Abfragen zusammenzufassen. Logisch, dass man diese Daten auch mal in einer Tabelle speichern mchte. Nur leider funktioniert das nicht so, wie man es sich vorstellt.

Wie es nicht funktioniert...

Logischerweise wrde man eine Insert Into-Abfrage mit mehreren per UNION-Statement zusammengefassten Datenherknften wie folgt aufbauen:

INSERT INTO Zieltabelle

SELECT Feld1, Feld2,... FROM Quelltabelle1

UNION

SELECT Feld1, Feld2,... FROM Quelltabelle2

Access meckert an dieser Stelle allerdings und gibt einen Syntaxfehler aus.

...und wie Sie es besser machen!

Um die gewnschte Abfrage zu realisieren, ist die vorherige Zusammenstellung der Teile der UNION-Abfrage in eine neue Abfrage und die anschlieende Anwendung des INSERT INTO-Statements auf das Ergebnis dieser Abfrage.

Statisch macht das keine Probleme: Sie erstellen einfach eine Abfrage mit dem Namen qryTemp und folgendem Inhalt:

SELECT Feld1, Feld2,... FROM Quelltabelle1

UNION

SELECT Feld1, Feld2,... FROM Quelltabelle2

Anschlieend nehmen Sie das Ergebnis dieser Abfrage folgendermaen in die INSERT INTO-Anweisung auf.

INSERT INTO Zieltabelle

SELECT * FROM qryTemp

INSERT INTO...UNION per VBA

Wenn man das ganze per VBA erledigen mchte, weil beispielsweise die Anzahl der beteiligten Tabellen variiert, verwenden Sie den folgenden Code:

Public Sub InsertIntoUnion()

    Dim db As DAO.Database

    Dim qdf As DAO.QueryDef

    Dim strSQL As String

    Set db = CurrentDb

    strSQL = "SELECT * FROM Quelltabelle1 "

    strSQL = strSQL & "UNION "

    strSQL = strSQL & "SELECT * FROM Quelltabelle2"

    Set qdf = db.CreateQueryDef("qryTemp", strSQL)

    db.Execute "INSERT INTO Zieltabelle(Suchkombination) SELECT Suchwort FROM qryTemp", dbFailOnError

    db.QueryDefs.Delete "qryTemp"

    db.Close

End Sub

... noch einfacher ...

Es gibt noch eine einfachere Variante, das Ergebnis einer UNION-Abfrage als Quelle einer INSERT INTO-Anweisung zu verwenden. Dazu fasst man das Ergebnis der UNION-Abfrage einfach nochmals per SELECT * FROM ... zusammen:

INSERT INTO Zieltabelle

SELECT * FROM (

SELECT Feld1, Feld2,... FROM Quelltabelle1

UNION

SELECT Feld1, Feld2,... FROM Quelltabelle2)

© 2003-2015 André Minhorst Alle Rechte vorbehalten.