对于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
答案 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);