2014-05-11 2 views
1

데이터베이스에서 사용할 수있는 모든 항목이 테이블 A에 키 값이 ItemNum 인 SQL Server 2008 데이터베이스에서 작업하고 있습니다. . 표 B와 표 C는 ItemNum을 키 값으로 사용하며 테이블 A의 항목이 실제로 사용되는 곳입니다. 표 A는 표 B와 표 C에서 사용되지 않는 많은 복제물을 포함하고 있습니다. 표 A에서 표 B 또는 표 C에 사용되지 않은 모든 ItemNum을 삭제해야합니다.SQL Server 2008에서 값을 찾을 수없는 모든 행을 삭제하는 쿼리

지금 다음과 같은 두 가지 쿼리가 있습니다. Select 문 (궁극적으로는 Delete 문으로 바뀌 었습니다)이 올바르게 작동하는지 모르겠으며 가능한 가장 효율적인 쿼리를 만들고 싶습니다. 이 같은

USE Database 
    GO 

    SELECT ItemNum 
    FROM B 
    WHERE EXISTS 
     (SELECT ItemNum FROM A WHERE A.ItemNum = B.ItemNum) 

    USE Database 
    GO 

    SELECT ItemNum 
    FROM C 
    WHERE EXISTS 
     (SELECT ItemNum FROM A WHERE A.ItemNum = C.ItemNum) 
+0

여기서 ... (x에서 선택 x) 그리고 ... (...)에 ...하지 않음 (...) – holaSenor

답변

2

당신은 간단한 가입하기 삭제 사용할 수있다? :;

DELETE A FROM A 
LEFT JOIN B ON A.itemnum = B.itemnum 
LEFT JOIN C ON A.itemnum = C.itemnum 
WHERE b.itemnum IS NULL 
    AND c.itemnum IS NULL; 

An SQLfiddle to test with.

+1

정확히 내가 필요한 것. 당신의 도움을 주셔서 감사합니다! –

2

뭔가

DELETE FROM TableA WHERE ItemNum NOT IN(SELECT ItemNum FROM TableB) and ItemNum NOT IN(SELECT ItemNum FROM TableC) 
+0

이 방법도 사용할 수 있지만 삭제 결합을 사용하면 더 간단합니다. 내 목적을 위해서. 도움을 주셔서 감사합니다. –

관련 문제