2017-04-12 40 views
0

我对这个东西相当陌生,现在已经停留了一段时间。 所以基本上我想写一个VB中的代码,它将从一个表(表A)中取出一列,并将它与另一个表(表B)中的某个其他列进行比较。现在我想从表B中的表A中的缺失元素复制到表A中(只是单个列而不是整行)。我很想为此获得基本的语法。 感谢您的帮助。在Visual Basic中编写的无与伦比的查询

回答

0

无需VBA。
使用查询向导和“查找不匹配查询向导”,然后在顶部添加INSERT INTO ([field name])

例如,我有Table1。[Column 1]包含字母表中的一些字母,然后我有Table2.Column2包含字母表中的所有字母。
注: [第1栏]周围的方括号,因为它有一个空格。

向导会给我:

SELECT Table2.Column2 
FROM Table2 LEFT JOIN Table1 ON Table2.[Column2] = Table1.[Column 1] 
WHERE (((Table1.[Column 1]) Is Null)); 

位在记事本++整理的,我有:

SELECT Column2 
FROM Table2 LEFT JOIN Table1 ON Table2.[Column2] = Table1.[Column 1] 
WHERE [Column 1] Is Null 

NB:我从SELECTWHERE删除表名条款Column2Table2Column 1所独有的,对于Table1是唯一的。如果列名出现在多个表中,则只需命名表名。

最后,我刚才添加的INSERT语句:

INSERT INTO Table1([Column 1]) 
SELECT Column2 
FROM Table2 LEFT JOIN Table1 ON Table2.[Column2] = Table1.[Column 1] 
WHERE [Column 1] Is Null 

最终注:的LEFT JOIN,所有值从表2返回表示(因为它是对的加入左),只有那些价值与连接标准相匹配的连接从Table1返回(在连接的右侧) - 将LEFT JOIN转换为RIGHT JOIN以反转此操作(或者将表格反过来)。 WHERE子句然后删除两个表中出现的值。

在代码中使用任何这些将做到这一点:

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 

Sub Test2() 

    Dim qdf As DAO.QueryDef 

    Set qdf = CurrentDb.CreateQueryDef("", "INSERT INTO Table1 ([Column 1]) " & _ 
              "SELECT Column2 " & _ 
              "FROM Table2 LEFT JOIN Table1 ON Table2.[Column2] = Table1.[Column 1] " & _ 
              "WHERE [Column 1] Is Null") 
    qdf.Execute dbFailOnError 

End Sub 
+0

谢谢!这很好。但是现在我只是好奇如何在VBA中执行相同的事情。你能帮助我吗? – pycoder

+0

已经添加了三个通过VBA运行查询的示例。 –