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

Откуда:
Сообщений: 548
Есть 3 таблицы, объединяет их поле в каждой из них, которое содержит соответствующий одинаковый номер (ключевое поле)

Необходимо удалить строки во всех 3-х таблицах, а то какие удалить определяется тем что в таблице3 в неком поле содержится определенное значение.

\Для определенности ключевые колонки во всех 3-х таблицах называются number, а колонка по значению которой отбор кандидатов на удаление называется test и удалять те строки, в которых test='тест'\
8 ноя 12, 14:54    [13440123]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли удалить строки в нескольких связанных таблицах  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
И что не получается?
8 ноя 12, 14:54    [13440130]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли удалить строки в нескольких связанных таблицах  [new]
ALARMus
Member

Откуда:
Сообщений: 548
Гавриленко Сергей Алексеевич,

Правильный ли такой запрос

delete
from t1, t2, t3
where t3.test ='тест' and t1.number=t2.number=t3.number;

(тестовой среды нет - на продуктиве рубить не посоветовашись нехочется)
8 ноя 12, 15:27    [13440381]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли удалить строки в нескольких связанных таблицах  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
ALARMus,

в команде DELETE может быть имя только одной таблицы.
Просто надо сохранить все number, удалённые из таблицы таблица3, в табличной переменной, например.
А из оставшихся таблиц удалять, используя JOIN с этой табличной переменной.
8 ноя 12, 15:32    [13440426]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли удалить строки в нескольких связанных таблицах  [new]
Glory
Member

Откуда:
Сообщений: 104751
ALARMus
тестовой среды нет - на продуктиве рубить не посоветовашись нехочется

Создать 3 временные таблицы тоже не судьба ?

ALARMus
Правильный ли такой запрос

delete
from t1, t2, t3
where t3.test ='тест' and t1.number=t2.number=t3.number;

Нет
8 ноя 12, 15:32    [13440431]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли удалить строки в нескольких связанных таблицах  [new]
как вариант
Guest
ALARMus,
DELETE FROM t1
WHERE t1.number in ( 
SELECT t3.number
WHERE t3.test ='тест' )
DELETE FROM t2
WHERE t2.number in ( 
SELECT t3.number
WHERE t3.test ='тест' )
DELETE FROM t3
WHERE t3.test ='тест'
9 ноя 12, 08:52    [13443749]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли удалить строки в нескольких связанных таблицах  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
Можно также создать в таблицах 1 и 2 FOREIGN KEY на таблицу 3 с каскадным удалением.
Тогда всё удаляется одной командой DELETE для 3-й таблицы
9 ноя 12, 12:05    [13445091]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить