在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
任何帮助表示赞赏!
谢谢。
答案 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;