Sql 基于三列连接两个表
对于MS Access,我如何完成以下任务。我曾考虑编写VBA循环,但我认为这需要一段时间 以下是两张表格: 表ASql 基于三列连接两个表,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
| 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。