首页 > 社区问答列表 >使用UNION的CREATE TABLE SELECT的Mariadb问题排除

  使用UNION的CREATE TABLE SELECT的Mariadb问题排除

我正在处理一个包含六个UNION SELECT的PHP脚本,并且在脚本中这个命令运行得很好。在从SQL客户端执行时,这个命令也能正常工作。然而,当我尝试将SELECT语句放在CREATE TABLE mytable SELECT的内部时,我得到了以下错误消息:

Incorrect column name ''

在六个UNION SELECT的片段中,有五个片段中存在一个名为''的列名,该列名在脚本的后续部分填充数据时作为占位符使用。但在其中一个UNION中,同样的位置是一个varchar(32)列。

似乎在正常执行的命令中并不在意存在一个"匿名"列。但在CREATE TABLE版本中,它不喜欢这样。

为什么SELECT和CREATE TABLE SELECT对于union列名有不同的规则?


P粉115840076
P粉115840076

  • P粉821231319
  • P粉821231319   采纳为最佳   2023-08-03 09:31:45 1楼

    Tables不能包含空白或缺失的列名,而结果集可以。而CREATE TABLE SELECT语句会从SELECT语句的结果集中获取表的列名。因此,您需要确保结果集的每个列都有一个名称,可以是从某个表的列派生出来的,也可以是通过AS别名指定的。例如,

    SELECT 'one' AS tablename, cola, colb, colc FROM table_one
     UNION ALL
    SELECT 'two',              cola, colb, colc FROM table_two
     UNION ALL
    SELECT 'three',            cola, colb, colc FROM table_three
    

    适用于CREATE TABLE语句,而

    SELECT 'one',   cola, colb, colc FROM table_one
     UNION ALL
    SELECT 'two',   cola, colb, colc FROM table_two
     UNION ALL
    SELECT 'three', cola, colb, colc FROM table_three
    

    不适用,因为它没有给第一列分配一个别名列名。

    +0 添加回复