2016-12-02 64 views
0

這個問題是錯誤的。我對工會的工作原理有一些很大的誤解。我現在正在閱讀。訪問別名表

編輯2016年4月12日 如果你還在位數的,你可以去這裏 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

你已經拿到答案。 scaisEdge明確地回答說,使用'insert into t4(c1,c2)select t1.c1,t1.c2 ....)'完全沒有問題,那麼爲什麼你不把它標記爲接受? –

+0

@Tho我寫的問題不清楚,也不完整。他回答了他以爲我問的一些問題。它沒有幫助我。 –

+0

您問了一個問題並得到了正確的答案,所以您應該接受它。但是,如果您認爲這個問題及其答案是沒有用的,那麼對您或任何未來的讀者來說都不要刪除它。 –

回答

0

沒有別名需要

,如果你可以簡單地插入使用的列匹配選擇

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) 
+0

我需要別名,因爲以後我可能需要使用table3執行一些其他操作。也許將其插入其他表中。 –

+0

您不需要用別名t4插入到table4中(插入到table4 t4(t4.col)中)。其餘的你可以將你的選擇與你喜歡的別名結合起來 – scaisEdge

1

withselect一部分聲明。您可以insertselect的結果,您可以在此select中使用with。也許語法是不是最直觀的,但這應該工作:

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; 

而且沒有你不需要(甚至不可能)使用雙別名。

0

假設你needto使用UNION ALL,而不是單個插入-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 
)