这个问题是错误的。关于工会如何运作,我有一些很大的误解。我现在正在读它。
编辑04.12.2016 如果您还有兴趣,可以去这里 Selecting the right column
我有类似的东西
with table3 as
(
select t1.c1, t1.c2...
from table1 t1
union all
select t2.c1, t2.c2...
from table2 t2
)select * from table3
我需要在另一个表中插入上面的所有行
insert into table4 t4
(
t4.c1, t4.c2...
)
select t3.c1, t3.c2...
from table3 t3
我的问题是,这个插入是否有效。我在表1和表2中的列名相同,我是否需要以不同的方式引用它们?
我需要这样写吗?
insert into table4 t4
(
t4.c1, t4.c2...
)
select t3.t1.c1, t3.t1.c2, t3.t2.c1...
from table3 t3
答案 0 :(得分:1)
with
是select
声明的一部分。您可以insert
结果select
,并且可以在此with
中使用select
。也许语法不是最直观的,但这应该有效:
insert into table4
with table3 as
(
select t1.c1, t1.c2...
from table1 t1
union all
select t2.c1, t2.c2...
from table2 t2
) select * from table3;
并且你不需要(甚至不能)使用双别名。
答案 1 :(得分:0)
不需要别名
如果列匹配,则只需使用insert select
insert into table4
( select t1.c1, t1.c2...
from table1 t1
union all
select t2.c1, t2.c2...
from table2 t2)
否则你应该声明列名
insert insert into table4(c1, c2... )
( select t1.c1, t1.c2...
from table1 t1
union all
select t2.c1, t2.c2...
from table2 t2)
答案 2 :(得分:0)
假设您需要使用UNION ALL
而不是单个insert-as-select语句插入到另一个表中,您可以尝试对来自不同表的列使用不同的别名:
with table1 as
(
select t2.name as t2_name,
t2.address as t2_address,
t2.age as t2_age,
null as t3_name,
null as t3_address,
null as t3_age,
from table2 t2
union all
select null,
null,
null,
t3.name,
t3.address,
t3.age
from table3 t3
)