2016-12-02 4 views
0

Этот вопрос неверен. У меня было очень большое недоразумение о том, как работает профсоюз. Я читаю об этом сейчас.Доступ к таблицам с псевдонимом

редактировать 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 

Мой вопрос, будет ли эта вставка работать. У меня есть clumns в таблицах 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 to 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

Мне нужны псевдонимы, потому что позже мне может потребоваться выполнить некоторые другие действия с таблицей3. Возможно, вставьте его в другой стол. –

+0

Вам не нужен псевдоним t4 для вставки в таблицу4 .. (insert into table4 t4 (t4.col)). для остальных вы можете комбинировать свой выбор, как вы pefer .. с псевдонимом, который вы предпочитаете – scaisEdge

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; 

И никто вам не нужно (даже не может) использовать двойные псевдонимы.

0

Предполагая, что вы needto использовать эту UNION ALL, вместо одной вставки-в-отборных заявлений для вставки в другую таблицу, вы можете попробовать использовать различные псевдонимы для столбцов из разных таблиц:

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 
) 
Смежные вопросы