고아 항목이 많은 테이블을 정리하려고합니다.테이블에서 고아 삭제하기
null 값을 찾아 다른 테이블과의 관계가 있는지 확인하여이 문제에 접근하고 있습니다.
DELETE FROM table1
LEFT JOIN table2 ON table1.ID = table2.ID
WHERE table2.ID IS NULL
왼쪽 외부 결합이 유효하지 않은 오류가 발생합니다.
내가
고아 항목이 많은 테이블을 정리하려고합니다.테이블에서 고아 삭제하기
null 값을 찾아 다른 테이블과의 관계가 있는지 확인하여이 문제에 접근하고 있습니다.
DELETE FROM table1
LEFT JOIN table2 ON table1.ID = table2.ID
WHERE table2.ID IS NULL
왼쪽 외부 결합이 유효하지 않은 오류가 발생합니다.
내가
이 시도 내가이 깨진 관계에서 이러한 고아를 삭제할 수있는 다른 방법에 대한 제안을 찾고 있어요는 :
여기DELETE FROM table1
WHERE NOT EXISTS (SELECT NULL FROM table2 WHERE table1.ID = table2.ID)
같은 구문을 사용하려면 어떻게 할 수있다 다음과 같습니다.
DELETE a
FROM table1 a
LEFT JOIN table2 b
ON a.id = b.id
WHERE b.id IS NULL
왜 그런지는 모르겠지만 @MaziarTaheriAbkenar 솔루션보다 훨씬 빠릅니다. SQL Server의 쿼리 계획은 당신과 그의 계획이 약간 다르지만 내 세계에서 실행 계획이 훨씬 빠릅니다. +1 –
@Smitty 이상한, 나는 그것이 같았다라고 생각했을 것이다 –
이것은 그것을하는 길이다. 하위 쿼리는이 작업에 대한 잘못된 도구입니다. – Teson
표 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
+1 : 당신이 처음이었습니다 –