基于三列连接两个表

时间:2016-06-03 15:56:04

标签: sql vba ms-access access-vba

对于MS-Access,我该如何完成以下操作。我在考虑编写VBA循环,但我认为这需要一段时间。

以下是两个表格:

表A

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

表B

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

我需要什么:

 |  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

我尝试过Access Query设计器,但我没有运气。我不确定如何在SQL中使用它。我已经有表设置了。

对于编程方式,我正在思考

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

3 个答案:

答案 0 :(得分:2)

join需要多个条件。幸运的是,MS Access通过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;

您可以使用INSERT插入现有表格; INTO创建一个新表。或者只是运行查询以获得结果。

答案 1 :(得分:0)

在SQL视图中,这应该可以工作,理想情况下比建议的循环更快

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

答案 2 :(得分:0)

如果您需要完全加入(即A的所有记录和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);