2012-05-22 3 views
0

최근 SQL에서 쿼리에 문제가있었습니다. 문제는 다음과 같습니다. "old"& "new"라는 2 개의 테이블이 있습니다. 둘 다 동일한 구조와 열 "key1", "key2"및 "description"을가집니다. 또한 테이블 "new"는 "old"및 추가 항목의 하위 집합을 포함합니다.단일 ID가없는 테이블에서 삭제

이제 "old"테이블에서 "new"에없는 모든 항목을 삭제하고 싶습니다. 문제는 오히려 "key1"도 "key2"도 고유하고, 둘 다의 조합에 불과하다는 것입니다.


예 져야 할 엔트리 :

올드 :

key1, key2, description 
1, 2, "Hello" 
1, 3, "World" 
2, 3, "!" 

새로운 기능 :

적어도 ACCESS97에 (나는 다음과 같은 SQL 문을 시도했지만 작동하지 않았다
key1, key2, description 
1, 3, "World" 
2, 3, "!" 

)

DELETE 
FROM old 
WHERE old.key1<>new.key1 AND old.key2 <> new.key2 

key1과 key2의 조합이 고유하다는 제약 하에서 "new"에 나타나지 않는 old에서 모든 항목을 삭제하는 방법에 대한 아이디어가 있습니까?

답변

3
DELETE FROM old 
WHERE NOT EXISTS (SELECT 1 
        FROM new 
        WHERE old.key1 = new.key1 
          AND old.key2 = new.key2) 

또한 설명이 일치

DELETE FROM old 
WHERE NOT EXISTS (SELECT 1 
        FROM new 
        WHERE old.key1 = new.key1 
          AND old.key2 = new.key2 
          AND old.description = new.description) 
+0

감사를 확인할 수 있습니다! 나는 그 존재 진술을 몰랐다. 나를 위해 일합니다. – Moe

1
DELETE * 
FROM old 
WHERE old.key1 & " " & old.key2 IN (select new.key1 & " " & new.key2 from new) 
+0

'&'를 사용하지 마십시오. 그건 C 나 Java가 아니라 SQL입니다. –