Могу ли я использовать псевдонимы в операторе INSERT? - PullRequest
7 голосов
/ 13 сентября 2010

Можем ли мы использовать псевдонимы со вставкой в ​​синтаксис?

Ни одна из следующих работ:

INSERT INTO tableblabla AS bla
INSERT INTO bla tableblabla
INSERT INTO tableblabla bla

Я не могу найти какую-либо информацию об этом;Есть ли правильный способ использовать псевдонимы в инструкции INSERT?

О возможных причинах: http://bugs.mysql.com/bug.php?id=3275

Ответы [ 2 ]

15 голосов
/ 14 января 2011

Увы, это невозможно, как видно по синтаксису INSERT .Обратите внимание, что он просто говорит [INTO] tbl_name без упоминания [AS] alias, в то время как синтаксис Update , который допускает псевдонимы, говорит "table_reference" и дополнительная документация утверждает, что это может быть расширен table_factor , который включает tbl_name [AS] alias.

К сожалению, возможность использовать псевдонимы таблиц в INSERT очень полезна для операторов INSERT ... ON DUPLICATE KEY UPDATE.Особенно при выполнении проверок столбцов, как в этом примере:

insert into very_long_table_name_that_can_be_modified_one_day_or_during_testing (
    mykey, 
    column1,
    column2,
    column3,
    <column99>
)
select
    mykey, 
    column1,
    column2,
    column3,
    <column99>
from subquery
on duplicate key update 
    column1 = ifnull(values(column1), very_long_table_name_that_can_be_modified_one_day_or_during_testing.column1), 
    column2 = ifnull(values(column2), very_long_table_name_that_can_be_modified_one_day_or_during_testing.column2), 
    column3 = ifnull(values(column3), very_long_table_name_that_can_be_modified_one_day_or_during_testing.column3), 
    <column99>;

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

6 голосов
/ 13 сентября 2010

Синтаксис INSERT не допускает псевдонимов.В любом случае, зачем вам это нужно в операторе INSERT?Вы можете только INSERT за один стол одновременно.

...