首页  >  问答  >  正文

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

<p>我正在处理一个包含六个UNION SELECT的PHP脚本,并且在脚本中这个命令运行得很好。在从SQL客户端执行时,这个命令也能正常工作。然而,当我尝试将SELECT语句放在CREATE TABLE mytable SELECT的内部时,我得到了以下错误消息:</p> <pre class="brush:php;toolbar:false;">Incorrect column name ''</pre> <p>在六个UNION SELECT的片段中,有五个片段中存在一个名为''的列名,该列名在脚本的后续部分填充数据时作为占位符使用。但在其中一个UNION中,同样的位置是一个varchar(32)列。<br /><br />似乎在正常执行的命令中并不在意存在一个"匿名"列。但在CREATE TABLE版本中,它不喜欢这样。<br /><br />为什么SELECT和CREATE TABLE SELECT对于union列名有不同的规则?</p><p><br /></p>
P粉115840076P粉115840076417 天前505

全部回复(1)我来回复

  • P粉821231319

    P粉8212313192023-08-03 09:31:45

    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
  • 取消回复