2
例如,如何從兩個表中同時刪除?
DELETE table1., table2. FROM table1, table2 WHERE (((table1.[Field1])=table2.[Field1]));
例如,如何從兩個表中同時刪除?
DELETE table1., table2. FROM table1, table2 WHERE (((table1.[Field1])=table2.[Field1]));
可以使用DELETE CASCADE其中刪除一個元件和依賴於它的任何其他。例如,如果您有學生表,課程表和訂購表(列出了學生想要遵循的所有課程),則可以在具有CASCADE的訂購表中刪除與他相關的學生和任何主題。
我建議嵌套光標:
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
沒有ANSI-SQL解決方案,因爲SQL標準不允許這樣做(另外:'[Field1]'不是ANSI SQL中的有效標識符)。但是一些DBMS具有可以讓你這樣做的擴展。你正在使用哪個DBMS? Postgres的?甲骨文? –