考虑以下几个表:
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
。
如何通过单个查询完成此操作?
答案 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。