访问别名表

时间:2016-12-02 12:41:44

标签: oracle select insert alias

这个问题是错误的。关于工会如何运作,我有一些很大的误解。我现在正在读它。

编辑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 

3 个答案:

答案 0 :(得分:1)

withselect声明的一部分。您可以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
)