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;
我有两个表: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;