Например,Как удалить из двух таблиц одновременно?
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;
Это будет перебрать все записи в table1, и для каждой записи, он будет найти записи в table2 где значение table1 [Field1] и table2. . [Поле2] совпадают. Затем он удалит обе записи.
Почему вы не можете просто удалить один за другим? – Igoranze
Нет решения ANSI-SQL, поскольку стандарт SQL этого не допускает (и, кроме того: '[Field1]' не является допустимым идентификатором в ANSI SQL для начала). Но в некоторых СУБД есть расширения, которые позволят вам это сделать. Какие СУБД вы используете? Postgres? Oracle? –