2013-08-12 5 views
1

Live 및 certified라는 두 개의 테이블이 있습니다. 일부 열은 두 표에 모두 존재하고 일부 열은 한 표에만 존재합니다. 두 테이블 모두 "macAddress"라는 필드가 있습니다. 이러한 macAddress 값은 대부분 두 테이블에서 겹치지 만 한 테이블에만 존재하는 레코드가 몇 개 있습니다.Microsoft Access 2007의 쿼리에 문제가 발생했습니다.

macAddress가 인증 된 테이블에없는 경우 Live 테이블에서 macAddress로 모든 행을 찾는 방법을 원합니다.

SELECT Live.* 
FROM Live 
WHERE macAddress NOT IN 
(SELECT macAddress FROM certified); 

가 나는 또한 왼쪽 외부 조인을 시도 : 여기

내가 지금까지 뭘하려

이러한 쿼리의 모두
SELECT DISTINCT Live.* 
FROM Live LEFT OUTER JOIN certified ON Live.macAddress = certified.macAddress 
WHERE certified.macAddress IS NULL; 

, 난 단지 열 제목을 가지고 있지만 레코드가 라이브 테이블에서.

+1

글쎄 지금은 바보 같아요. (라이브에 포함되지 않은 인증 된 레코드를 찾는) 반대 테이블을 사용하여 쿼리를 시도해 보았습니다. 이전에 시도한 쿼리에 대해 표시 할 레코드가 없어야합니다. 답변을 주셔서 감사합니다 – Deena

+0

OK. 한편 나는'인증 된'에 존재하지 않는'Live.macAddress'가 있다고 가정 한 대답을 제출했다. 도움이되지는 않지만 앞으로 다른 사람을 도울 수 있기를 바랍니다. – HansUp

답변

0

아래에 포함 된 Livecertified의 샘플 데이터로 Access 2007에서이 쿼리를 검사했습니다.

SELECT DISTINCT Live.* 
FROM 
    Live 
    LEFT OUTER JOIN certified 
    ON Live.macAddress = certified.macAddress 
WHERE certified.macAddress IS NULL; 

쿼리 내가 당신이 요구하는지 무슨 생각 인 저에게이 결과 집합을 제공합니다. 당신이 certified에 존재하지 않는 Live.macAddress 가치가 확인했지만, 사람들은 같은 의해 반환되지 않습니다 가정

macAddress 
38-60-77-77-D0-D4 

:

macAddress  some_text 
00-0C-29-80-BA-A3 bar 

Live :

macAddress  some_text 
00-0C-29-80-BA-A3 bar 
38-60-77-77-D0-D4 foo 

certified 귀하의 데이터로 쿼리, 아마도 macAddress 색인이 생성되어 색인이 손상되었을 수 있습니다. 이 상황에서 테이블에 존재하지만 색인에없는 값인 Live.macAddress을 가질 수 있습니다 ... 그들은 왜곡되거나 모두 누락되었습니다. 따라서 db 엔진이 인덱스를 사용하여 Live에서 행을 검색하면 인덱스에 macAddress 값이없는 레코드는 고려되지 않습니다.

당신이 곁에 ... 데이터베이스에

  1. 실행 압축 & 수리 문제의 원인인지 여부를 테스트 할 수 있습니다. 그런 다음 쿼리를 다시 시도하십시오.
  2. 첫 번째 제안으로도 문제가 해결되지 않으면 macAddress을 기반으로 인덱스를 삭제하고 쿼리를 다시 시도하십시오.

또한 이러한 단계가 발생하기 전에 db 파일의 백업 복사본을 만들어야합니다.

Access 데이터베이스에 대한 내 경험으로 인해 인덱스 손상이 거의 발생하지 않지만 발생할 수 있습니다. 컴팩트 & 수리는 항상 나를 위해 그것을 치료했습니다. 부패 문제를 해결하든 아니든간에 일상적인 Compact는 유용한 방법입니다. 부수적 인 장점 중 하나는 데이터베이스 통계를 업데이트하여 쿼리를 처리하는 방법을 결정할 때 db 엔진에 최신 정보를 제공하는 것입니다. 또한 2000 년 이후 Access 버전을 사용하면 Access에서 데이터 문제를 발견하면 자동으로 Compact가 실행됩니다.