问题描述
如果我有多个临时表,并且我想将数据插入其中一个,但随后继续创建更多临时表,有没有办法做到这一点,或者我是否需要分解我的查询。
这是我想做的一个例子
WITH A AS (SELECT Column1,Column2,Column3 FROM SomeTable WHERE SomeConditionA),-- Inital Temp Table
B AS(SELECT Column1,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
本质上我的问题是我不知道如何以一种允许我在之后继续创建更多临时表的方式编写插入。
谢谢!
解决方法
通用表表达式 (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,Column3
FROM SomeTable
WHERE SomeConditionA
UNION ALL
SELECT Column4,Column5,Column6
FROM SomeTable
WHERE SomeConditionB),--Derives From C
E AS(...) --Derives From D
SELECT * FROM E --Final Select Statement