INSERT INTO mit UNION-AbfragenUnion-Abfragen dienen dazu, die Daten mehrerer gleichartiger Tabellen oder Abfragen zusammenzufassen. Logisch, dass man diese Daten auch mal in einer Tabelle speichern möchte. Nur leider funktioniert das nicht so, wie man es sich vorstellt. Wie es nicht funktioniert...Logischerweise würde man eine Insert Into-Abfrage mit mehreren per UNION-Statement zusammengefassten Datenherkünften 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 gewünschte Abfrage zu realisieren, ist die vorherige Zusammenstellung der Teile der UNION-Abfrage in eine neue Abfrage und die anschließende 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
Anschließend nehmen Sie das Ergebnis dieser Abfrage folgendermaßen in die INSERT INTO-Anweisung auf.
INSERT INTO Zieltabelle
SELECT * FROM qryTemp INSERT INTO...UNION per VBAWenn man das ganze per VBA erledigen möchte, 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) |