2016-06-22 5 views
2

どのようにして2つのテーブルから同時に削除できますか?例えば

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

なぜあなたは1つずつ削除できませんか? – Igoranze

+1

SQL標準ではこれを許可していないため、ANSI-SQLの解決方法はありません(また、 '[Field1]'はANSI SQLの有効な識別子ではありません)。しかし、一部のDBMSには拡張機能があり、そうすることができます。どのDBMSを使用していますか? Postgres?オラクル? –

答えて

2

あなたはそれに依存要素と他を削除DELETE CASCADEを使用することができます。

たとえば、学生テーブル、コーステーブル、および学生が従うすべてのコースをリストしたサブスクリプションテーブルを持っている場合は、サブスクリプションテーブルでCASCADEを使用して学生とその関連エントリを削除できます。

1

私は、ネストされたCURSORのことをお勧め:TABLE1内のすべてのレコードをこの意志ループ

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; 

を、どこでTABLE1の値がレコードごとに、それは、table2の中でレコードを検索します[フィールド1]と表2。 。[Field2]は同じです。次に、両方のレコードを削除します。

関連する問題