在一个查询中从多个表中删除

时间:2015-08-19 15:15:43

标签: sql db2

我是DB2的初学者。我想使用一个查询从2个表中删除。我之所以这样做是因为删除的条件很复杂,并且在大表中隐含JOIN。我不想两次做同样的查询。基本上我想要这样的东西:

DELETE from table1 t1, table2 t2 
WHERE t1.ID = t2.ID 
AND ID in ( -- some select and JOIN stuff) 

2 个答案:

答案 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)

简短回答:你不能这样做

我的想法

  • 两次运行相同的查询应该是特别多的问题​​,因为db通常会获得一些缓存。
  • 如果问题是性能可能问题出在查询,服务器cpu或磁盘上。

可能的解决方案

  • 在table1 on delete上创建一个触发器,您还将删除表2上的相同项目