Удалить записи из нескольких таблиц

Рассмотрим эти несколько таблиц:

tab1
-------
userid
email
address
environment

tab2

-------
ecode
company
policy

tab3
-------
id
pan no.
dl no.

Здесь tab1 — родительская таблица. Я хочу удалить все userid из tab1 из tab2 и tab3. Либо userid будет в tab1, либо в tab2, либо в обоих. Эти таблицы являются специфическими для среды средствами environment/tab1 и environment/tab2.

Как это сделать с помощью одного запроса?


person abhinav singh    schedule 18.08.2010    source источник


Ответы (2)


Я не эксперт по AS400, но я не знаю, как это сделать на любом диалекте SQL. Вам нужно запустить транзакцию, выполнить отдельные удаления, а затем зафиксировать транзакцию, если вы хотите убедиться, что действие является атомарным (это означает, что выполняется все или ни одно из них).

Код, вероятно, будет выглядеть примерно так:

BEGIN TRANSACTION

DELETE FROM tab2
WHERE userid IN (SELECT userid FROM tab1)

DELETE FROM tab3
WHERE userid IN (SELECT userid FROM tab1)

COMMIT TRANSACTION

Вы не указываете, как именно связаны эти таблицы, поэтому я предположил. Кроме того, у вас, вероятно, должна быть какая-то обработка ошибок, которая выдает ROLLBACK, если возникает ошибка. Я не знаю синтаксиса обработки ошибок для AS400 (DB2?), так что вам придется его поискать.

person Tom H    schedule 18.08.2010
comment
хорошо... не могли бы вы предложить мне, как мне все сделать, чтобы мне больше не нужно было думать? - person MatBailie; 18.08.2010

Среды на одной машине? Если нет, вы можете посмотреть файлы DDM. См. здесь.

person JGFMK    schedule 21.11.2010