我有3个表 - 表1 &表2其中有记录,表3中它们的差异应该插入。这是我现在有:访问SQL - 插入不匹配的记录
SQL = "INSERT INTO Table3 (Field1,Field2)" & _
"SELECT Table2.Field1, Table2.Field2" & _
" FROM Table2 LEFT JOIN Table1 ON Table2.Field1 = Table1.Field1" & _
" OR Table2.Field2 = Table1.Field2" &_
" WHERE (((Table1.Field1) Is Null) OR ((Table1.Field2) Is Null))" & _
" AND NOT (Table2.Field1 IS NULL AND Table2.Field2 IS NULL)"
该查询成功地插入了不匹配的记录表3中,但是当我再次运行此查询,应该不会再被插入任何东西,查询仍然插入1条记录在表3中,其中一个表1或表2中的字段为空。
如何消除这种情况发生,缺陷在哪里?
编辑:这里是从表样品....
Table1:
CompanyNo CompanyName
111 Microsoft
Apple
333 Oracle
Table2:
CompanyNo CompanyName
111 Microsoft
222 Apple
333 Oracle
Intel
555 Google
Then Table3 should result differences:
CompanyNo CompanyName
222 Apple
Intel
555 Google
而上的代码结果第一次运行是正确的,但是当我再次运行它,“英特尔”的记录再次显示 - 但它不该'因为Table2中的所有新数据都已经在Table1中准备好了(我在这个Query之后对Table1执行INSERT和UPDATE,所以“Table”中的“Intel”记录已经准备好了)。
它可能与'JOIN ON'子句中的'OR'有关。 – Parfait
是的,可能。但是我尝试了各种各样的与AND,OR和ON,LEFT JOIN,INNER JOIN的组合,并且在第二次运行时无法消除该空插入。 – LuckyLuke82
有些事情我不清楚。再次运行追加查询将再次向表中添加相同数量的记录。没有检查记录是否已经在表格中。所以如果它第一次追加10条记录,那么它会在第二,第三......时间再次执行。我错过了什么吗? – ehh