我正在尝试找到一种更有效的方法来执行查询:
从Table1中选择所有行,其中相同设计的Table2(在另一个数据库中)中的任何列都不同。 此查询将用于UPDATE查询,以使用Table2中的任何更改来更新Table1。
我现在的做法是:
SELECT T1.*
FROM Table1 T1 LEFT JOIN (SELECT * FROM Table2 IN 'FilePath') T2 ON
T1.ID = T2.ID
WHERE
T1.Column1 <> T2.Column1 OR
T1.Column2 <> T2.Column2 OR
...
T1.Column67 <> T2.Column67
现在这可以工作,但在67列(约40秒 - 1分钟)上可以理解的速度很慢 - 而这个选择查询将是每天更新Table1的结果查询
因此,如果有一种非常简单的方法可以让我忽视这一点,我会很感激一些见解
答案 0 :(得分:1)
UNION
可用于Access中的The shortest, fastest, and easiest way to compare two tables...:
SELECT Table1.*
FROM Table1
INNER JOIN (
SELECT DISTINCT ID
FROM (
SELECT * FROM Table1
UNION ALL --< Have identical records duplicated
SELECT * FROM Table2
) Combined
GROUP BY ID, Column1, Column2, ... Column67 --< Compare significant columns
HAVING COUNT(*) = 1 --< Take unique records only
) Different ON Table1.ID = Different.ID;
请注意:由于@ HansUp已指出Microsoft Access文档规定GROUP BY Clause中最多只能使用10个字段。虽然我发现Access 2016中所有68列都没有分组问题,但请注意,这显然是一个无证的功能,必须谨慎使用。
答案 1 :(得分:0)
将所有字段连接在一起可能更有效,然后进行单一比较。
这个VBA应该为你提供一个或多或少可行的SQL:
Dim id, i As Integer
Dim idList(5)
For Each selectedItem As DataGridViewRow In qstSets.SelectedRows
'show ids of multiple selected rows
id = selectedItem.Cells("ID").Value
idList(i) = id
i += 1
Next selectedItem
Dim sResult As String = ""
For Each elem As String In idList
sResult &= elem & ", "
Next
MsgBox(sResult)