2015-08-19 3 views
0

Я новичок в DB2. Я хочу удалить из 2 таблиц, используя один запрос. Причина, по которой я хочу это сделать, заключается в том, что условие для удаления является сложным и подразумевает JOIN в больших таблицах. Я не хочу делать тот же запрос дважды. В основном я хочу что-то вроде этого:Удаление из нескольких таблиц одним запросом

DELETE from table1 t1, table2 t2 
WHERE t1.ID = t2.ID 
AND ID in (-- some select and JOIN stuff) 
+2

Поместите результаты вашего сложного запроса во временную таблицу, а затем используйте это для удаления из каждой из ваших целевых таблиц. Возможно, в рамках одной транзакции. – MatBailie

ответ

0

Короткий ответ: Вы не можете сделать это

Мои мысли

  • Запуск тот же запрос дважды should't быть много проблем, особенно потому, что БД, как правило, получить некоторые кэш.
  • Если проблема связана с производительностью, возможно, проблема заключается в запросе, на сервере или на диске.

Возможное решение

  • Создать триггер table1 on delete где вы также удалить тот же предмет на столе 2
3

С DB2 для LUW вы можете сделать что-то вроде этого, используя данные ссылка на таблицу изменений:

WITH lst (id) as (-- some select and JOIN stuff), 
lst1 (id) as (
    SELECT id FROM OLD TABLE (
    DELETE FROM table1 WHERE id IN (SELECT id FROM lst) 
) 
) 
SELECT id FROM OLD TABLE (
    DELETE FROM table2 WHERE id IN (SELECT id FROM lst1) 
) 

OLD TABLE (DELETE ...) - ссылка на таблицу изменения данных, которая содержит в этом случае все строки, которые были удалены вложенным DELETE.

Я не думаю, что этот трюк поддерживается на других платформах DB2, хотя он может быть в DB2 для z/OS v.11 - у меня нет возможности проверить это.

+0

DB2 for i поддерживает ссылку на таблицу изменения данных (DCTR) с версии v6.1, но только «ЗАКЛЮЧИТЕЛЬНАЯ ТАБЛИЦА» и «НОВАЯ ТАБЛИЦА». Но классный трюк для LUW. – Charles

Смежные вопросы