我能在INSERT语句中使用别名吗?

9

我们能在insert into语句中使用别名吗?

以下任何一种方法都不行:

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

我似乎找不到关于这个的任何信息;在INSERT语句中使用别名的有效方法是否存在?

关于可能的原因: http://bugs.mysql.com/bug.php?id=3275


你想使用哪种 SQL? - Michael Eakins
@Meakins - MySQL 版本。@pekka:我编辑了我的原始问题。 - MEM
2个回答

22
很遗憾,正如插入语法所示,这是不可能的。请注意它只是简单地表示为[INTO] tbl_name,没有提到[AS] alias,然而更新语法允许使用别名,并且进一步的文档说明这可以扩展为包括tbl_name [AS] alias表因子
这很不幸,因为在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>;

如果表名更改,相比于在查询中使用别名,需要修改大量代码行。

2
这应该是一条注释。但无论如何,我还是点赞了,因为它非常重要。 - th3an0maly
我有同样的问题,如何处理?我的列名不明确。 - M.Abulsoud
相关:https://stackoverflow.com/questions/29386803/mysql-insert-from-select-with-conditional-on-duplicate-key-update - enharmonic

8

INSERT语法不允许使用别名。为什么在INSERT语句中需要别名呢?你只能一次INSERT到一个表中。


9
我能想到需要使用别名的唯一原因是在相关子查询中... - OMG Ponies
我在询问是否有意义,因为我知道我不知道所有关于查询的mysql可能性,所以,既然我学到使用别名是一个好习惯,以便更好地理解我们正在使用什么...我认为这是相关的。尽管如此,答案部分:“插入语法不允许使用别名”就是我现在需要知道的全部内容。;)出于某些原因,或者可能是原因,请参见我今天早些时候的问题版本。非常感谢。 :) - MEM
3
语法的便利性、灵活性和一致性。 - Preston
1
如果您继承了一个使用保留字作为列名称的数据库 - JohnnyFaldo
1
然后将列名用反引号括起来。`` - Adam Jimenez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接