2009-04-07 3 views
6

나는 여러 가지 시도를했지만 항상 구문 오류가 발생합니다.한 테이블에서 MS Access의 다른 테이블에없는 행을 모두 얻으려면 어떻게해야합니까?

테이블 A와 테이블 B 두 가지 테이블이 있습니다. 둘 다 고유 ID로 con_number 필드를가집니다. tableA에없는 tableB의 모든 행을 선택하려고합니다.

누구든지이 쿼리를 MS Access에서와 같이 제공 할 수 있습니까?

저는이 경우 NOT IN을 사용하는 것이 비효율적이라는 것을 알고 있습니다. 그러면 더 좋은 방법이 있다면 좋을 것입니다.

감사합니다.

SELECT con_number 
FROM TableB 
WHERE con_number NOT IN (SELECT con_number FROM tableA); 

실험 버전 (이 빨리 경우 단지 그것을 밖으로 시도, 모르는) :

SELECT B.con_number, MAX(A.con_number) AS check 
FROM tableB B LEFT JOIN tableA A ON B.con_number = A.con_number 
GROUP BY B.con_number 
HAVING check IS NULL; 

주 버전 (느리지 만 확실) IN

답변

17
SELECT TableB.con_number 
FROM TableB 
WHERE NOT EXISTS (SELECT 1 
        FROM TableA 
        WHERE TableA.con_number = TableB.con_number); 
+0

;-) +1 – Tomalak

+0

나를 괴롭히다 ;-) 각 줄을 4 칸 들여 쓰기하여 문장의 가독성을 높일 수 있습니다 (강조 표시하고 코드 샘플 버튼을 누르면 – Smashery

+0

-1), 그는 버전을 요청했습니다 "Not in"이 없다. –

2

하지 : 둘 다 꽤 표준적인 SQL이어야한다. 나는 어떤 ms-access 특정 기능을 모른다.

0

나는 다음과 같은 것을 기억한다 :

SELECT * FROM TableA.* LEFT JOIN TableB _ 
    ON TableA.con_number = TableB.con_number WHERE 'criteria' 

하지만 '기준'이이 설정됩니다 비교할 수없는 마법사를 찾기가

... TableA.con_number <> TableB.con_Number 
... TableB.con_number IS NULL 
... TableA.con_number NOT like TableB.con_Number 
1

을 사용할 기억하지 않습니다. SQL은 다음과 같습니다.

SELECT TableB.con_number 
FROM TableB LEFT JOIN TableA 
ON TableB.con_number = TableA.con_number 
WHERE TableA.con_number Is Null 
관련 문제