2016-06-03 10 views
0

Wie erreiche ich für MS-Access folgendes. Ich dachte daran, VBA-Loop zu schreiben, aber ich denke, es wird eine Weile dauern.Verbinden von zwei Tabellen basierend auf drei Spalten

Hier sind die beiden Tabellen:

Tabelle A

| id | Day | Month | F_value1 
--------------------------------------- 
| 1 | 10 | 11 | 523 
| 1 | 11 | 11 | 955 
| 2 | 1 | 11 | 45 
| 2 | 2 | 11 | 49 

Tabelle B

| id | Day | Month | G_value1 
--------------------------------------- 
| 1 | 10 | 11 | 19923 
| 1 | 11 | 11 | 55455 
| 2 | 1 | 11 | 45454 

Was ich brauche:

| id | Day | Month | F_value1 | G_value1 
----------------------------------------------- 
| 1 | 10 | 11 | 523  | 19923  
| 1 | 11 | 11 | 955  | 55455 
| 2 | 1 | 11 | 45  | 45454 
| 2 | 2 | 11 | 49  | Null 

Ich versuchte Access Query Designer, aber ich hatte kein Glück. Ich bin mir nicht sicher, wie ich das in SQL machen soll. Ich habe bereits ein Tabellen-Setup.

Für die Programmierung Art und Weise, ich denke

for each row in Table A 
for each row in Table B 
    If TableA.fields = TableB.fields 
    Then Insert it into new table 
End loop 
End loop 

Antwort

0

In SQL-Ansicht, sollte diese Arbeit und im Idealfall schneller sein als Ihre vorgeschlagene Schleife

SELECT a.*, b.G_Value1 
INTO TableC 
FROM TableA a 
LEFT JOIN TableB b 
ON a.ID=b.ID 
+0

Wäre dies der Lage sein Fall zu behandeln, wenn Tabelle A hat einige id, Tag, Monat, die nicht in ist Tabelle B? In diesem Fall hoffe ich, Nullwerte für Tabelle B Felder in Tabelle C zu haben. – pozza

+1

Überprüfen Sie dieses Bild für Details von SQL Joins: http://i.stack.imgur.com/VQ5XP.png – Dave

2

Sie mehrere Bedingungen für die join s benötigen. Glücklicherweise unterstützt MS Access dies mit LEFT JOIN:

SELECT a.id, a.Day, a.Month, a.F_value1, b.G_Value1 
FROM TableA as a LEFT JOIN 
    TableB as b 
    ON a.ID = b.ID AND a.day = b.day AND a.month = b.month; 

Sie INSERT in eine vorhandene Tabelle einfügen können; INTO, um eine neue Tabelle zu erstellen. Oder führen Sie einfach die Abfrage aus, um die Ergebnisse zu erhalten.

0

Wenn Sie voll (dh alle Datensätze von A verbinden und alle Aufzeichnungen B:

SELECT A.ID, A.Day, A.Month, A.F_value1, B.G_value1 
FROM A LEFT JOIN B ON (A.Month= B.Month) AND (A.Day= B.Day) AND (A.ID = B.ID) 
UNION 
SELECT B.ID, B.Day, B.Month, A.F_value1, B.G_value1 
FROM B LEFT JOIN A ON (B.ID = A.ID) AND (B.Day= A.Day) AND (B.Month= A.Month); 
Verwandte Themen