DB2 - 从表

时间:2015-05-20 18:23:44

标签: select replace db2

在db2中是否有一种方法可以用同一个表中的选定行替换整个表?

像表格中的REPLACE之类的东西选择*来自tableName,其中col1 =' a&#39 ;;
(我可以导出所选行,删除整个表并再次加载/导入,但我想避免这些步骤并使用单个查询)。

原表
col1 col2
 a 0< - 替换所有行并替换为col1 =' a'
 a 1< -col1 =' a'
 b 2
 c 3

期望的结果表
col1 col2
 a 0
 1 1

任何帮助表示赞赏!
谢谢。

2 个答案:

答案 0 :(得分:0)

我知道无法一步到位地做你所要求的......

您必须选择临时表格然后复制回来。

但我不明白为什么你首先需要这样做。让我们假设有一个REPLACE TABLE命令......

REPLACE TABLE mytbl WITH (
  SELECT * FROM mytbl
  WHERE col1 = 'a' AND <...>
)

为什么不简单地删除反向行集......

DELETE FROM mytbl
WHERE NOT (col1 = 'a' AND <...>)

请注意,WHERE子句中的比较完全相同。你只需将它们包装在NOT()中就可以删除你不想保留的那些。

答案 1 :(得分:0)

这与我对duplicate question的答案重复:

您无法一步完成此操作。截断表所需的锁定会阻止您同时查询表。

您最好的选择是声明一个全局临时表(DGTT)并将所需的行插入其中,截断源表,然后将DGTT中的行插回源表。类似的东西:

declare global temporary table t1 
   as (select * from schema.tableName where ...) 
   with no data
   on commit preserve rows
   not logged;

insert into session.t1 select * from schema.tableName;

truncate table schema.tableName immediate;

 insert into schema.tableName select * from session.t1;