2016-07-28 3 views
0

하위 쿼리 가입 지금까지. 이제 문제 : 테이블의 storedparts가 너무 커서 join 프로세스에 너무 오래 걸리는 문제가 있습니다. 내 솔루션 : newparts를 storedparts의 모든 부분이 아니라 4 일이 넘지 않은 부분과 비교하면 ...이 하위 쿼리를 시도했지만 실행할 수 없습니다.MS ACCESS SQL 내가 두 개의 테이블이

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);" 

도움을 주시면 감사하겠습니다.

+2

왜'RIGHT JOIN'입니까? 외부 조인이 실제로 필요한 경우에는 테이블을 전환하고 'LEFT JOIN'을 대신합니다. 대부분의 사람들은 이해하기 힘든 사람들을 찾아 내고, 더 혼란스러운 방법에 합류하십시오. ("선택적 데이터 오른쪽 조인 주 테이블"대신 "주 테이블 왼쪽 조인 선택적 데이터"이해하기 쉽습니다.) – jarlh

답변

0

테이블에 인덱스가 있으면 문제가되지 않습니다.

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; 
0

당신은 조인 문 다음에 WHERE 절을 추가하고 쿼리의 성능을 향상 경우 볼 수 있었다. Else 이것을 시도해보고 작동하는지 확인하십시오.

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);"