2016-06-22 65 views
2

例如,如何從兩個表中同時刪除?

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

爲什麼不能一一刪除? – Igoranze

+1

沒有ANSI-SQL解決方案,因爲SQL標準不允許這樣做(另外:'[Field1]'不是ANSI SQL中的有效標識符)。但是一些DBMS具有可以讓你這樣做的擴展。你正在使用哪個DBMS? Postgres的?甲骨文? –

回答

2

可以使用DELETE 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]是一樣的。然後它會刪除這兩個記錄。