我是DB2的初学者。我想使用一个查询从2个表中删除。我之所以这样做是因为删除的条件很复杂,并且在大表中隐含JOIN
。我不想两次做同样的查询。基本上我想要这样的东西:
DELETE from table1 t1, table2 t2
WHERE t1.ID = t2.ID
AND ID in ( -- some select and JOIN stuff)
答案 0 :(得分:3)
使用DB2 for 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 for z / OS v.11中 - 我无法测试它。
答案 1 :(得分:0)
简短回答:你不能这样做
我的想法
可能的解决方案
on delete
上创建一个触发器,您还将删除表2上的相同项目