2016-06-22 4 views
2

,두 테이블에서 동시에 어떻게 삭제합니까? 예를 들어

DELETE table1., table2. FROM table1, table2 WHERE (((table1.[Field1])=table2.[Field1])); 
+1

왜 하나씩 삭제할 수 없습니까? – Igoranze

+1

SQL 표준은 이것을 허용하지 않으므로 ANSI-SQL 솔루션은 존재하지 않습니다. 그리고 [: Field1]은 ANSI SQL에서 유효한 식별자가 아닙니다. 그러나 일부 DBMS에는 확장을 할 수있는 기능이 있습니다. 어떤 DBMS를 사용하고 있습니까? 포스트그레스? 신탁? –

답변

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]는 동일합니다. 그런 다음 두 레코드를 모두 삭제합니다.