Sql 基于三列连接两个表

Sql 基于三列连接两个表,sql,ms-access,vba,Sql,Ms 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

对于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查询设计器,但没有成功。我不知道如何在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

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

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

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

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

您需要多个条件才能加入
join
s。幸运的是,MS Access通过左连接支持这一点:

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
插入到现有表中
进入
以创建新表。或者只需运行查询即可获得结果。

您需要多个条件才能加入
join
s。幸运的是,MS Access通过左连接支持这一点:

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
插入到现有表中
进入
以创建新表。或者只需运行查询即可获得结果。

如果需要完全联接(即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);
如果您需要完全连接(即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);

当表A有一些id、天、月而表B中不存在时,这能处理这种情况吗?在这种情况下,我希望表C中的表B字段有空值。当表A有一些id、天、月而表B中不存在时,这能处理这种情况吗?在这种情况下,我希望表B中的字段有空值乐C。