DELETE table1., table2. FROM table1, table2 WHERE (((table1.[Field1])=table2.[Field1]));
2
A
답변
2
당신은 요소 그것에 의존하는 다른를 삭제 CASCADE 삭제 사용할 수 있습니다.
예를 들어 학생 테이블, 코스 테이블 및 학생이 따르고 싶은 모든 코스를 나열하는 서브 스크립 션 테이블이있는 경우 CASCADE가있는 서브 스크립 션 테이블에서 해당 학생 및 관련된 엔트리를 삭제할 수 있습니다.
1
내가 중첩 제안 커서 :.
DECLARE @OuterVar [datatype];
DECLARE @OuterPKey [datatype];
DECLARE @InnerPKey [datatype];
DECLARE OuterCursor CURSOR
FOR SELECT table1.[Field1], table1.[PrimaryKey]
FROM table1;
OPEN OuterCursor
FETCH NEXT FROM OuterCursor INTO @OuterVar, @OuterPKey;
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE InnerCursor CURSOR
FOR SELECT table2.[PrimaryKey]
FROM table2
WHERE table2.[Field2] = @OuterVar;
OPEN InnerCursor;
WHILE @@FETCH_STATUS = 0
BEGIN
DELETE FROM table1 WHERE [PrimaryKey] = @OuterPKey;
DELETE FROM table2 WHERE [PrimaryKey] = @InnerPKey;
FETCH NEXT FROM InnerCursor INTO @InnerPKey;
END;
CLOSE InnerCursor;
DEALLOCATE InnerCursor;
FETCH NEXT FROM OuterCursor INTO @OuterVar, @OuterPKey;
END;
CLOSE OuterCursor;
DEALLOCATE OuterCursor;
테이블 1의 모든 레코드를 통해이 의지 루프, 그리고 각 레코드에 대해,이 표 2 표 1의 값 [필드 1] 및 표 2의 레코드를 찾을 수 . [Field2]는 동일합니다. 그런 다음 두 레코드를 모두 삭제합니다.
왜 하나씩 삭제할 수 없습니까? – Igoranze
SQL 표준은 이것을 허용하지 않으므로 ANSI-SQL 솔루션은 존재하지 않습니다. 그리고 [: Field1]은 ANSI SQL에서 유효한 식별자가 아닙니다. 그러나 일부 DBMS에는 확장을 할 수있는 기능이 있습니다. 어떤 DBMS를 사용하고 있습니까? 포스트그레스? 신탁? –