MS ACCESS SQL 加入子查询

MS ACCESS SQL Join Subquery

我有两个表:newparts、storedparts

我将newparts中不是jet的storedparts中的部分插入到storedparts中:

SQL_String = "INSERT INTO storedparts " & _
             "SELECT newparts.* " & _
             "FROM storedparts " & _
             "RIGHT JOIN newparts ON (storedparts.identifier = newparts.identifier) AND (storedparts.timeStamp = newparts.timeStamp) " & _
             "WHERE ((storedparts.AutoID) Is Null);"

到目前为止一切正常。现在的问题是:Table storedparts 变得如此之大以至于程序在连接过程中花费的时间太长。我的解决方案:只是将新部件与存储部件的所有部分进行比较,而只是与不超过 4 天的部分进行比较......我尝试了这样的子查询,但我无法将其获取到 运行 .

SQL_String = "INSERT INTO storedparts " & _
             "SELECT newparts.* " & _
             "FROM storedparts (WHERE storedparts.timestamp > Now() - 4) " & _
             "RIGHT JOIN newparts ON (storedparts.identifier = newparts.identifier) AND (storedparts.timeStamp = newparts.timeStamp) " & _
             "WHERE ((storedparts.AutoID) Is Null);"

感谢任何帮助。

您可以在连接语句后添加 where 子句,看看它是否提高了查询的性能。否则试试这个,看看它是否有效

SQL_String = "INSERT INTO storedparts " & _
             "SELECT newparts.* " & _
             "FROM ( SELECT * FROM storedparts WHERE 
              storedparts.timestamp > DateAdd ( 'd', -4, Now()) )sparts" & _
             "RIGHT JOIN newparts ON (sparts.identifier = newparts.identifier) AND 
             (sparts.timeStamp = newparts.timeStamp) " & _
             "WHERE ((sparts.AutoID) Is Null);"

如果您的表有索引,这就不是问题。

CREATE INDEX ndx_sp_identifier ON storedparts (identifier);
CREATE INDEX ndx_np_identifier ON newparts (identifier);

然后我建议您将查询更改为类似@jarlh 指出的内容。

INSERT INTO storedparts 
SELECT newparts.* 
FROM newparts
LEFT JOIN storedparts 
ON newparts.identifier = storedparts.identifier
AND newparts.timeStamp = storedparts.timeStamp
WHERE storedparts.AutoID Is Null;