我目前在Microsoft访问中有两个表包含两个不同日期的数据。大多数数据并不重要,但有两个命名类别(Name1,Name2用于本文的目的)。我试图检查Table1中的所有Name1 / Name2配对是否也在Table2中。如果没有,我想将它们添加到另一个表,MissingData。
这很复杂,因为数据库的大小以及一个名称的重复是常见的事实。例如,表格的简化视图如下所示:
表1 - 名称1 /其他数据/名称2 // A / 2 / Z // A / Apple / Y // B / Bat / Y
表2 - 名称1 /其他数据/名称2 // A /橙/ Z // B / 56 / Y // A /随机/ X
在这种情况下,我希望函数将Table1中的A / Apple / Y行放入MissingData表中。
这是我到目前为止的代码。它几乎可以工作,但有一个小问题;如果匹配的Name2数据的顺序与Table2中的顺序不同,则Name1的重复实例将丢失。例如,如果Table1有A / X,A / Y和A / Z,而Table2有A / Z,A / X和A / Y,则报告数据丢失(注意 - 我不确定订单是罪魁祸首,但这是我的猜测。
提前感谢您的帮助。
Public Sub SaleSorter()
Dim db As DAO.Database
Dim dest As String
Set db = CurrentDb
Dim sqry7 As String
sqry7 = "INSERT INTO MissingData(dest) SELECT * FROM Tester1 WHERE NOT EXISTS (SELECT * FROM Tester2 WHERE Tester1.[Name1] = Tester2.[Name1] AND Tester1.[Name2] = Tester2.[Name2] )"
DoCmd.RunSQL sqry7
End Sub
* dest只是表格中所有字段名称的字符串,在我省略的函数的前一部分中。
答案 0 :(得分:0)
我会看看EXCEPT and INTERSECT。您可以使用EXCEPT来确定哪些名称是第一个表而不是第二个表,而INTERSECT只返回第一个和第二个表中的名称。
-- this assumes table3 is your 'missing persons' table
-- add anyone that is in table1 and not in table2
INSERT INTO #table3
SELECT Name1, Name2 FROM #table1
EXCEPT
SELECT Name1, Name2 FROM #table2
-- add anyone that is in table2 and not in table1
INSERT INTO #table3
SELECT Name1, Name2 FROM #table2
EXCEPT
SELECT Name1, Name2 FROM #table1