Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Удаление строк  [new]
mankilla
Member

Откуда:
Сообщений: 2
Помогите пожалуйста с решением. Есть две таблицы tbl1, tbl2. Необходимо удалить записи из обеих таблиц по условию tbl1.f1=tbl2.fl1 и tbl1.f2=tbl2.fl2
30 янв 13, 11:58    [13849658]     Ответить | Цитировать Сообщить модератору
 Re: Удаление строк  [new]
Glory
Member

Откуда:
Сообщений: 104751
mankilla
Необходимо удалить записи из обеих таблиц по условию tbl1.f1=tbl2.fl1 и tbl1.f2=tbl2.fl2

Одновременно из 2х что ли удалить ?
30 янв 13, 12:00    [13849670]     Ответить | Цитировать Сообщить модератору
 Re: Удаление строк  [new]
mankilla
Member

Откуда:
Сообщений: 2
Glory,
да, интересует есть ли именно такая возможность?
30 янв 13, 12:13    [13849749]     Ответить | Цитировать Сообщить модератору
 Re: Удаление строк  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
mankilla
Glory,
да, интересует есть ли именно такая возможность?
Сохранить пересекающиеся записи во временную таблицу и написать два delete.
30 янв 13, 12:14    [13849755]     Ответить | Цитировать Сообщить модератору
 Re: Удаление строк  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Гавриленко Сергей Алексеевич
mankilla
Glory,
да, интересует есть ли именно такая возможность?
Сохранить пересекающиеся записи во временную таблицу и написать два delete.

можно еще output кляузу использовать для первого delete и вставить результат во временную таблу, которую использовать во втором delete, ну и все это в транзакции
30 янв 13, 12:18    [13849773]     Ответить | Цитировать Сообщить модератору
 Re: Удаление строк  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
И триггер FOR DELETE можно написать
30 янв 13, 12:36    [13849911]     Ответить | Цитировать Сообщить модератору
 Re: Удаление строк  [new]
_ч_
Member

Откуда:
Сообщений: 1446
mankilla,

Как-то так наверное

create table #temp(f1 int, f2 int)

delete from tbl1
output deleted.* into #temp
from tbl1
inner join tbl2 on tbl1.f1 = tbl2.f1 and tbl1.f2 = tbl2.f2


delete from tbl2
from tbl2
inner join #temp t on t.f1 = tbl2.f1 and t.f2 = tbl2.f2
30 янв 13, 13:16    [13850253]     Ответить | Цитировать Сообщить модератору
 Re: Удаление строк  [new]
_ч_
Member

Откуда:
Сообщений: 1446
или так:

MERGE tbl1
USING tbl2 on (tbl1.f1 = tbl2.f1 and tbl1.f2 = tbl2.f2)
WHEN MATCHED THEN 
	DELETE
	OUTPUT deleted.* into #temp
;

MERGE tbl2
USING #temp tbl1 on (tbl1.f1 = tbl2.f1 and tbl1.f2 = tbl2.f2)
WHEN MATCHED THEN 
	DELETE
;
30 янв 13, 13:19    [13850277]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить