2016-03-30 4 views
1

Ich habe 4 verschiedene Tabellen, mit Feld Id. Ich möchte eine fünfte Tabelle mit vier Feldern erstellen; Jedes Feld enthält eine Liste aller IDs aus jeder Tabelle. Die IDs haben nichts miteinander zu tun, deshalb kann ich mir nicht vorstellen, was sie tun sollen. Wenn ich eine Gewerkschaft mache, weiß ich nicht, aus welcher Tabelle ich komme. Kann ich das irgendwie machen?Wie mehrere Felder aus mehreren Tabellen ohne Beziehung zwischen ihnen auszuwählen?

enter image description here

+0

Dies ist sehr schwierig in MS Access zu tun. –

+1

Wenn die IDs nichts miteinander zu tun haben, was bringt es, sie in einer Tabelle zusammenzufassen? Was willst du erreichen? Wenn wir das verstehen, können wir Ihnen vielleicht helfen. – massie

+0

Es wäre einfach mit einer VBA-Recordset-Schleife. Aber haben alle 4 Tabellen die gleiche Anzahl an Zeilen? – Andre

Antwort

1

Dies ist eine Lösung in VBA, DAO Methoden. Der Kürze halber habe ich nur Tabelle1 und Tabelle3 eingefügt. Ungetestet, aber es sollte funktionieren. :)

Public Sub FillResult() 

    Dim DB As DAO.Database 
    Dim rsT As DAO.Recordset ' Target 
    Dim rs1 As DAO.Recordset, rs3 As DAO.Recordset ' Source tables 

    Set DB = CurrentDb 
    ' Clean out result table 
    DB.Execute "DELETE * FROM tResult" 
    Set rsT = DB.OpenRecordset("tResult", dbOpenDynaset, dbAppendOnly) 

    Set rs1 = DB.OpenRecordset("SELECT Id FROM table1", dbOpenSnapshot) 
    Set rs3 = DB.OpenRecordset("SELECT aId FROM table3", dbOpenSnapshot) 

    ' Main loop runs as long as there are records left in at least one source table 
    Do While Not (rs1.EOF And rs3.EOF) 
     ' Add new record in tResult 
     rsT.AddNew 

     ' For each source table: if not EOF, copy current value to target table and move to next record 
     If Not rs1.EOF Then 
      rsT!table1 = rs1!ID 
      rs1.MoveNext 
     End If 

     If Not rs3.EOF Then 
      rsT!table3 = rs3!aID 
      rs3.MoveNext 
     End If 

     rsT.Update 
    Loop 
    rsT.Close 

End Sub 
1

Sie alle diese Tabellen kombinieren können vollständige äußere Verknüpfung mit (für MS Access diff Logik UNION) und verstehen sich inklusive/behandeln die NULL-Werte auf weitere Fragen.

für MS Access

SELECT t1.[id] table1,NULL table2,NULL table3,NULL table4 FROM table1 t1 UNION 
SELECT NULL table1,t2.[id] table2,NULL table3,NULL table4 FROM table2 t2 UNION 
SELECT NULL table1,NULL table2,t3.[aid] table3,NULL table4 FROM table3 t3 UNION 
SELECT NULL table1,NULL table2,NULL table3,t4.[bid] table4 FROM table4 t4 

Ergebnis:

table1 table2 table3 table4 
11  NULL NULL NULL 
32  NULL NULL NULL 
NULL 22  NULL NULL 
NULL 45  NULL NULL 
NULL NULL 1  NULL 
NULL NULL 5  NULL 
NULL NULL NULL 2 
NULL NULL NULL 7 

Ich weiß, das ist nicht die genaue Lösung ist, kann aber hilfreich sein.

Für SQL Server können Sie auf diese Weise tun

SELECT t1.[id] table1 
    ,t2.[id] table2 
    ,t3.[aid] table3 
    ,t4.[bid] table4 
FROM table1 t1 
FULL OUTER JOIN table2 t2 ON t1.id = t2.id 
FULL OUTER JOIN table3 t3 ON t1.id = t3.aid 
FULL OUTER JOIN table4 t4 ON t1.id = t4.bid 

Aber dies wird auch die NULL-Werte erzeugen und müssen diese NULL-Werte auf weitere Fragen ausschließen/handhaben.

+3

Unterstützt MS Access volle äußere Verbindung? IIRC-Nr. – Arvo

+0

können wir eine andere Logik (UNION) verwenden, um den vollständigen äußeren Join in MS Access zu implementieren. Ergebnis geändert. Dies erzeugt jedoch auch die NULL-Werte und muss diese NULL-Werte bei weiteren Abfragen ausschließen. Ich weiß, das ist nicht die genaue Lösung, aber kann hilfreich sein. –

Verwandte Themen