我对这些东西很陌生,现在我坚持了一段时间。 所以基本上我想在VB中编写一个代码,它将从一个表中获取一个列(表A),并将其与另一个表中的其他列进行比较(表B)。现在我希望表A中表A中缺少的元素被复制到表A中(只是那一列,而不是整行)。我很想得到一个基本的语法。 谢谢你的帮助。
答案 0 :(得分:0)
不需要VBA
使用查询向导和“查找不匹配的查询向导”,然后只需在顶部添加INSERT INTO ([field name])
。
例如,我有Table1。[第1列]包含一些字母,然后我有Table2.Column2包含所有字母的字母。
NB: [第1列]周围的方括号,因为它有一个空格。
向导会给我:
SELECT Table2.Column2
FROM Table2 LEFT JOIN Table1 ON Table2.[Column2] = Table1.[Column 1]
WHERE (((Table1.[Column 1]) Is Null));
在Notepad ++中整理了一下,我有:
SELECT Column2
FROM Table2 LEFT JOIN Table1 ON Table2.[Column2] = Table1.[Column 1]
WHERE [Column 1] Is Null
NB :我已从SELECT
和WHERE
条款中删除了表格名称,因为Column2
对Table2
和{{}是唯一的1}}对Column 1
是唯一的。如果列名出现在多个表中,则只需使用表名称。
最后,我只是添加INSERT语句:
Table1
最终NB: LEFT JOIN表示从Table2返回所有值(因为它位于连接的左侧),只有那些与连接条件匹配的值从Table1返回(在连接的权利) - 将LEFT JOIN转到RIGHT JOIN以反转这个(或者将表放在另一个方向)。然后WHERE子句删除两个表中出现的值。
要在代码中使用其中任何一个都可以:
INSERT INTO Table1([Column 1])
SELECT Column2
FROM Table2 LEFT JOIN Table1 ON Table2.[Column2] = Table1.[Column 1]
WHERE [Column 1] Is Null
Sub Test()
With DoCmd
.SetWarnings False
.OpenQuery "Query3"
.SetWarnings True
End With
End Sub
Sub Test1()
Dim db As DAO.Database
Set db = CurrentDb
db.Execute "INSERT INTO Table1 ( [Column 1] ) " & _
"SELECT Column2 " & _
"FROM Table2 LEFT JOIN Table1 ON Table2.[Column2] = Table1.[Column 1] " & _
"WHERE [Column 1] Is Null"
End Sub