从多个表中删除记录

时间:2010-08-18 18:16:17

标签: sql ibm-midrange

考虑以下几个表:

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

tab2

-------
ecode
company
policy

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

这里tab1是父表。我想从useridtab1中删除tab2的所有tab3userid将位于tab1tab2或两者中。这些表是特定于环境的表示environment/tab1environment/tab2

如何通过单个查询完成此操作?

2 个答案:

答案 0 :(得分: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?)的错误处理语法,所以你需要查看它。

答案 1 :(得分:0)

环境是否在同一台机器上?如果不是,您可能想要查看DDM文件。 请参阅here