首页 > 解决方案 > DB2 在脚本中间插入临时表

问题描述

如果我有几个临时表,并且我想将数据插入其中一个,然后继续创建更多临时表,是否有办法做到这一点,或者我是否需要分解我的查询。

这是我想做的一个例子

WITH A AS (SELECT Column1, Column2, Column3 FROM SomeTable WHERE SomeConditionA), -- Inital Temp Table
B AS(SELECT Column1, Column2, Column3 FROM SomeTable WHERE SomeConditionB), --Second Temp Table
INSERT INTO A SELECT * FROM B --Insert Table B into Table A
C AS(...), --Derives From A
D AS(...), --Derives From C
E AS(...) --Derives From D
SELECT * FROM E --Final Select Statement

本质上我的问题是我不知道如何以一种允许我之后继续创建更多临时表的方式编写插入。

谢谢!

标签: insertdb2temp

解决方案


公用表表达式 (CTE)WITH A AS (SELECT...)不是实际的临时表,您不能插入其中。

看来您不需要 B,因为它与 A 中选择的列相同,只是OR条件

WITH A AS (SELECT Column1, Column2, Column3 
           FROM SomeTable 
          WHERE SomeConditionA 
             or SomeConditionB),
  C AS(...), --Derives From A
  D AS(...), --Derives From C
  E AS(...) --Derives From D
SELECT * FROM E --Final Select Statement

如果 B 需要选择其他列或从另一个表中选择,则UNION ALL(如果可以重复或不可能)或UNION(删除任何重复的行)结果。

WITH A AS (SELECT Column1, Column2, Column3 
           FROM SomeTable 
          WHERE SomeConditionA 
            UNION ALL
          SELECT Column4, Column5, Column6 
           FROM SomeTable 
          WHERE SomeConditionB),
  C AS(...), --Derives From A
  D AS(...), --Derives From C
  E AS(...) --Derives From D
SELECT * FROM E --Final Select Statement

推荐阅读