2011-07-03 3 views
4

고아 항목이 많은 테이블을 정리하려고합니다.테이블에서 고아 삭제하기

null 값을 찾아 다른 테이블과의 관계가 있는지 확인하여이 문제에 접근하고 있습니다.

DELETE FROM table1 
LEFT JOIN table2 ON table1.ID = table2.ID 
    WHERE table2.ID IS NULL 

왼쪽 외부 결합이 유효하지 않은 오류가 발생합니다.

내가

답변

10

이 시도 내가이 깨진 관계에서 이러한 고아를 삭제할 수있는 다른 방법에 대한 제안을 찾고 있어요는 :

여기
DELETE FROM  table1 
WHERE NOT EXISTS (SELECT NULL FROM table2 WHERE table1.ID = table2.ID) 
+1

+1 : 당신이 처음이었습니다 –

17

같은 구문을 사용하려면 어떻게 할 수있다 다음과 같습니다.

DELETE a 
FROM table1 a 
LEFT JOIN table2 b 
ON a.id = b.id 
WHERE b.id IS NULL 
+0

왜 그런지는 모르겠지만 @MaziarTaheriAbkenar 솔루션보다 훨씬 빠릅니다. SQL Server의 쿼리 계획은 당신과 그의 계획이 약간 다르지만 내 세계에서 실행 계획이 훨씬 빠릅니다. +1 –

+0

@Smitty 이상한, 나는 그것이 같았다라고 생각했을 것이다 –

+2

이것은 그것을하는 길이다. 하위 쿼리는이 작업에 대한 잘못된 도구입니다. – Teson

0

표 1은 분리 된 레코드가 포함 된 하위 테이블입니다. 표 2는 부모 테이블입니다.

DELETE ChildTable 
    FROM Table1 ChildTable  
    LEFT JOIN Table2 ParentTable 
    ON ChildTable.id = ParentTable.id 
    WHERE ParentTable.id IS NULL 

정말 도움이되는 기사입니다. SQL JOINs make it easy to find and fix missing data