用visual basic编写的无与伦比的查询

时间:2017-04-12 13:53:24

标签: sql vba ms-access

我对这些东西很陌生,现在我坚持了一段时间。 所以基本上我想在VB中编写一个代码,它将从一个表中获取一个列(表A),并将其与另一个表中的其他列进行比较(表B)。现在我希望表A中表A中缺少的元素被复制到表A中(只是那一列,而不是整行)。我很想得到一个基本的语法。 谢谢你的帮助。

1 个答案:

答案 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 :我已从SELECTWHERE条款中删除了表格名称,因为Column2Table2和{{}是唯一的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