2010-08-18 5 views
1

Рассмотрим эти несколько таблиц:Удаление записей из нескольких таблиц

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.

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

ответ

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?), Поэтому вам нужно будет это посмотреть.

+0

ОК ... можете ли вы предложить мне шаги .... –

+0

Добавлено .......... –

+4

ok ... можете ли вы предложить мне, как я все делаю, поэтому мне не нужно думать еще когда-либо? – MatBailie

0

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

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